如何用Python加载PEM文件获取certificate issuer name及serial number?解决加载错误
问题原因与解决方法
核心问题
你生成的PublicKey.pem是EC公钥文件,不是X509证书。openssl x509命令和Python的x509.load_pem_x509_certificate仅支持加载X509证书,自然会报错。另外,证书发行者(issuer)、序列号(serial number)是X509证书的专属属性,公钥文件中不存在这些信息,必须先基于密钥生成证书。
解决步骤
1. 生成自签名证书
使用你的私钥生成包含公钥和元数据的自签名证书,执行以下命令:
# 生成有效期365天的自签名证书,自定义发行者信息 openssl req -new -x509 -key PrivateKey.pem -out Certificate.pem -days 365 -subj "/CN=MyIssuer/O=MyOrganization/C=CN"
-subj参数可自定义发行者字段:
CN:通用名称(对应你要获取的Common Name)O:组织名称C:国家代码
2. 验证证书有效性
执行以下命令确认证书可正常加载:
openssl x509 -noout -text -in Certificate.pem
输出内容中会清晰显示Issuer、Serial Number等信息。
3. 修改Python代码提取证书信息
替换原代码,加载新生成的Certificate.pem来获取所需信息:
from cryptography import x509 from cryptography.x509.oid import NameOID from cryptography.hazmat.backends import default_backend with open('Certificate.pem', 'r') as cert_file: cert_data = cert_file.read().encode() cert_info = x509.load_pem_x509_certificate(cert_data, default_backend()) # 获取发行者的Common Name issuer_cn = cert_info.issuer.get_attributes_for_oid(NameOID.COMMON_NAME)[0].value print('发行者通用名称:', issuer_cn) # 获取证书序列号 serial_number = cert_info.serial_number print('证书序列号:', serial_number)
补充说明
如果需要获取CA签发的正规证书,需先生成CSR(证书签名请求)提交给CA,拿到CA签发的证书后,用上述同样方法加载即可。
内容的提问来源于stack exchange,提问作者KbiR
相关产品推荐
相关产品推荐

