0

我正在编写一个 Python 脚本,我需要在其中确定预证书和叶证书是否匹配。

为此,在删除 SCT(1.3.6.1.4.1.11129.2.4.2) 和 Precert Poison(1.3.6.1.4.1.11129.2.4.3) 扩展后,我需要比较 precert 和叶子证书的 TBS 证书。

使用 python 加密模块,很容易获得 TBS 证书:

from cryptography import x509
from cryptography.hazmat.backends import default_backend

cert = x509.load_pem_x509_certificate(cert_data_pem, default_backend())

print(cert.tbs_certificate_bytes)

但是,我无法弄清楚如何删除这些扩展。看起来 asn1crypto 可以做到这一点,但似乎可用的文档很少。

删除这些扩展的最巧妙方法是什么?如果可行,我很高兴依赖 openssl,因为我已经在脚本中使用它。

4

1 回答 1

0

好吧,pyasn1 库最终起作用了。此片段解码 TBS 证书并删除两个扩展名,然后重新编码:

from pyasn1.codec.der.decoder import decode as asn1_decode
from pyasn1.codec.der.encoder import encode as asn1_encode
from pyasn1_modules import rfc5280
from cryptography import x509
from cryptography.hazmat.backends import default_backend

cert = asn1_decode(x509.load_pem_x509_certificate(cert_data_pem, default_backend()).tbs_certificate_bytes, asn1Spec=rfc5280.TBSCertificate())[0]

newExts = [ext for ext in cert["extensions"] if str(ext["extnID"]) not in ("1.3.6.1.4.1.11129.2.4.2", "1.3.6.1.4.1.11129.2.4.3")]
cert["extensions"].clear()
cert["extensions"].extend(newExts)

print(asn1_encode(cert))

于 2020-09-22T10:04:28.283 回答