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

如何在Python中为X.509 CSR添加自定义属性(如Industry、InvoiceType)

在Python中给X.509 CSR添加非标准自定义属性

你的代码目前是生成X.509证书而非CSR(证书签名请求),且直接给Subject添加自定义字段的方式不可行——Subject的字段对应预定义的OID,非标准属性需要通过X.509扩展或PKCS#9属性实现。以下是正确的实现方式:

关键修正点

  1. 改用crypto.X509Req创建CSR对象(X509用于生成证书,不符合你的需求)
  2. 自定义属性需绑定私有OID(可自行定义1.2.3.4.5.x这类符合格式的私有段OID)
  3. 通过扩展或属性接口添加自定义字段,而非直接修改Subject

完整实现代码

from OpenSSL import crypto

def csr_gen(
    commonName="commonName",
    organizationUnitName="organizationUnitName",
    organizationName="organizationName",
    countryName="NT",
    location="location",
    industry="Manufacturing",
    invoiceType="Electronic",
    PRIV_KEY_FILE="private.key",
    CSR_FILE="csr.pem"
):
    # 生成RSA密钥对
    key = crypto.PKey()
    key.generate_key(crypto.TYPE_RSA, 4096)

    # 创建CSR对象
    csr = crypto.X509Req()
    subject = csr.get_subject()

    # 设置标准Subject字段
    subject.CN = commonName
    subject.C = countryName
    subject.L = location
    subject.O = organizationName
    subject.OU = organizationUnitName

    # 注册自定义OID与字段名的映射(用于在CSR中显示友好名称)
    industry_oid = "1.2.3.4.5.6.7.8"
    invoicetype_oid = "1.2.3.4.5.6.7.9"
    crypto.X509Req.add_extra_oid(industry_oid, "Industry")
    crypto.X509Req.add_extra_oid(invoicetype_oid, "InvoiceType")

    # 添加自定义PKCS#9属性(会显示在CSR的Attributes段下)
    csr.add_attribute(industry_oid, industry)
    csr.add_attribute(invoicetype_oid, invoiceType)

    # 用私钥签名CSR
    csr.sign(key, 'sha512')

    # 保存私钥和CSR文件
    with open(PRIV_KEY_FILE, "wt") as f:
        f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, key).decode("utf-8"))
    with open(CSR_FILE, "wt") as f:
        f.write(crypto.dump_certificate_request(crypto.FILETYPE_PEM, csr).decode("utf-8"))

csr_gen()

验证自定义属性

使用OpenSSL命令查看CSR内容,可看到自定义属性:

openssl req -in csr.pem -text -noout

输出中会在Attributes段下显示Industry和InvoiceType字段及对应值。

内容的提问来源于stack exchange,提问作者Starlight

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:22:44