使用 python 加密证书生成器向证书添加 arbitrary/deprecated 扩展

Add an arbitrary/deprecated extension to a certificate using python cryptography certificate builder

我正在尝试在 python 中创建之前使用 openssl ca 命令构建的证书。一切都完美无缺,除了一件事:我需要添加“nsCertType”扩展,它似乎已被弃用。但是,我找不到添加任意证书扩展的方法。 for go,甚至指定了使用 OpenSSL 的 python 的解决方案,但是我无法弄清楚没有 OpenSSL 时该怎么做。这是我的代码:

    inter_server_cert = x509.CertificateBuilder().subject_name(
    subject
).issuer_name(
    inter_ca_cert.issuer
).public_key(
    inter_server_key.public_key()
).serial_number(
    x509.random_serial_number
).not_valid_before(
    datetime.datetime.utcnow()
).not_valid_after(
    datetime.datetime.utcnow() + datetime.timedelta(days=duration_rootca)
).add_extension(
    x509.BasicConstraints(
        ca=False, path_length=0
    ),
    critical=True
).add_extension(
    x509.SubjectKeyIdentifier.from_public_key(inter_server_key.public_key()),
    critical=False
).add_extension(
    x509.AuthorityKeyIdentifier.from_issuer_subject_key_identifier(authority_key_identifier.value),
    critical=False
).add_extension(
    x509.KeyUsage(
        key_cert_sign=False,
        crl_sign=False,
        digital_signature=True,
        content_commitment=False,
        key_encipherment=True,
        data_encipherment=False,
        key_agreement=True,
        encipher_only=False,
        decipher_only=False
    ),
    critical=False
).add_extension(
    x509.ExtendedKeyUsage([x509.oid.ExtendedKeyUsageOID.SERVER_AUTH]),
    critical=False
).sign(inter_ca_key, hashes.SHA256(), default_backend())

您可以使用 UnrecognizedExtension. This is not directly documented, but you can see an example of it in use in the tests (https://github.com/pyca/cryptography/blob/3367c18bf2e71639843e38498f5ad2159835122d/tests/x509/test_x509.py#L3327).

cryptography 中编码任意扩展名

请注意,您必须以字节形式提供 OID 和已经 DER 编码的负载。如果您有包含所需值的样本证书,您可以对其进行解析以获得正确的序列。