gpt4 book ai didi

python - 如何在 Python 中将 X509Name 对象转换为字符串

转载 作者:太空宇宙 更新时间:2023-11-04 09:58:54 25 4
gpt4 key购买 nike

我正在尝试使用主机名将主题字段捕获为字符串。像这样:

/C=US/ST=California/L=Mountain View/O=Google LLC/CN=*.google.com

可以使用

获得相同的输出
echo -n | openssl s_client -connect google.com:443 2>/dev/null | grep subject
subject=/C=US/ST=California/L=Mountain View/O=Google LLC/CN=*.google.com

尝试了一些 subprocess 模块来获得上述输出,但最终落在了 OpenSSL 模块上以帮助我,因为我不太精通 Subprocess 模块。使用 OpenSSL,我能够获得所需的输出,但它作为 X509Name 对象返回:

import socket, ssl
import OpenSSL

hostname = "google.com"

cert = ssl.get_server_certificate((hostname, 443))
x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
print(x509.get_subject())

<X509Name object '/C=US/ST=California/L=Mountain View/O=Google LLC/CN=*.google.com'>

我希望它以字符串形式返回。这可以实现吗?

最佳答案

检查 [pyOpenSSL]: crypto - X509Name objects (get_components) 获取更多详细信息。

这是可能的,需要一些处理。专有名称字符串是各个组件字符串的串联,其中每个组件字符串的格式为 <strong>/</strong><em>name</em><strong>=</strong><em>value</em> .

示例:

>>> import ssl
>>> import OpenSSL
>>>
>>> pem = ssl.get_server_certificate(("google.com", 443))
>>> cert_x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
>>>
>>> subject = cert_x509.get_subject()
>>> subject
<X509Name object '/C=US/ST=California/L=Mountain View/O=Google LLC/CN=*.google.com'>
>>>
>>> subject_str = "".join("/{:s}={:s}".format(name.decode(), value.decode()) for name, value in subject.get_components())
>>> subject_str
'/C=US/ST=California/L=Mountain View/O=Google LLC/CN=*.google.com'

有多种获取证书数据的方法,这是另一种:[SO]: How can I decode a SSL certificate using python? (@CristiFati's answer) .

关于python - 如何在 Python 中将 X509Name 对象转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57877935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com