首页 > 解决方案 > 如何使用 x509.load_pem_x509_certificate() Python 密码学获取证书 CommonName?

问题描述

如何使用 Python库CommonName从客户端证书获取?cryptography

如果使用pyOpenSSLand 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模块来做到这一点?

标签: pythoncryptographyx509client-certificates

解决方案


推荐阅读