Python的标准库,即使是最新版本,也不包含任何可解码X.509证书的内容。但是,附加cryptography
软件包确实支持此功能。引用文档中的示例:
>>> from cryptography import x509
>>> from cryptography.hazmat.backends import default_backend
>>> cert = x509.load_pem_x509_certificate(pem_data, default_backend())
>>> cert.serial_number
2
另一个可选的附加软件包是pyopenssl
。这是围绕OpenSSL C API的精简包装,这意味着有 可能 做您想做的事情,但是希望花几天的时间来整理文档。
如果您无法安装Python附加软件包,但确实有openssl
命令行实用程序,
import subprocess
cert_txt = subprocess.check_output(["openssl", "x509", "-text", "-noout",
"-in", certificate])
应该会产生与您从中的Web实用工具获得的大致相同的东西cert_txt
。
顺便说一句,直接进行base64解码会产生二进制gobbledygook的原因是这里有两层编码。X.509证书是ASN.1数据结构,序列化为X.690 DER格式,然后,由于DER是二进制格式,因此使用base64铠装以便于文件传输。(在这方面的许多标准都是在90年代编写的,当时您只能可靠地发送7位ASCII码,否则无法可靠地发送任何东西。)