You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:01:09