python - 如何使用 x509.load_pem_x509_certificate() Python 密码学获取证书 CommonName?
问题描述
如何使用 Python库CommonName
从客户端证书获取?cryptography
如果使用pyOpenSSL
and ssl
,我使用:
import ssl
from OpenSSL import crypto
cert_raw = 'MIIGXDCCBUSgAwIBAgIJAMgCuv1aXz7l...base64 encoded`
cert_bytes = base64.b64decode(cert_raw)
cert_pem = ssl.DER_cert_to_PEM_cert(cert_bytes)
cert = crypto.load_certificate(crypto.FILETYPE_PEM, cert_pem)
从那里使用起来很简单:
subject = cert.get_subject()
cn = subject.CN
print(cn)
thethings.com
但我似乎无法找到cryptography
单独使用模块的快速方法。
我试过了:
import ssl
from cryptography import x509
cert_raw = 'MIIGXDCCBUSgAwIBAgIJAMgCuv1aXz7l...base64 encoded`
cert_bytes = base64.b64decode(cert_raw)
cert_pem = ssl.DER_cert_to_PEM_cert(cert_bytes)
cert = x509.load_pem_x509_certificate(cert_pem.encode('ascii'), default_backend())
但最终要拆分一个字符串以获得CN。
我不相信它CN
会一直在位置上[0]
。
subject = cert.subject
cn = subject.rfc4514_string()
cn_value = cn.split(',')[0].split('=')[1]
print(subject)
print(cn)
print(cn_value)
<Name(OU=Domain Control Validated,CN=thethings.com)>
CN=thethings.com,OU=Domain Control Validated
thethings.com
有没有更好的方法来使用cryptography
模块来做到这一点?
解决方案
推荐阅读
- matlab - 将数字添加到 4D 矩阵中的所有负值
- node.js - 如何使用 Kuzzle 上传文件
- jquery - JQuery 自动完成:在一个字段中显示同一个 JSON 对象的多个属性
- c++ - 在原生 c++ 插件中将 ARCore 图像 (YUV_420_888) 转换为 cv::Mat
- perl - 我可以在 perl 的子例程中声明全局变量吗?
- javascript - 如何删除具有相同值的 jQuery?
- xml - 使用 xsl 检查 XML 字符串中的值
- apache - mod_rewrite,重定向并设置cookie,防止重定向循环
- django - DetailSerializer 具有 listerializer 属性
- python-3.x - 用于创建文件夹的 Python API 并在文件夹已存在时附加增量编号