如何使用x509.load_pem_x509_certificatePython加密技术获得证书CommonName?

问题描述

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

如果使用pyOpenSSLssl,则使用:

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模块有更好的方法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)