我有一个 python 脚本,用于使用 PyASN1 和pyasn1_modules
模块生成带有证书扩展的 X509 证书。但是现在我已经将这些模块更新到 pypi 的最新版本(以前它们来自 Ubuntu 14.04 repos),生成的证书不再有效(根据openssl x509
命令和dumpasn1
显示先前生成的证书的更改的命令,特别是扩展值是不再包装在OctetString
容器中)。
这是有问题的代码:
from pyasn1.type import univ
from pyasn1.codec.der import encoder as der_encoder
from pyasn1_modules import rfc2459
extn = rfc2459.BasicConstraints()
extn.setComponentByName('cA', True)
extn.setComponentByName('pathLenConstraint', 5)
extn_val = der_encoder.encode(extn)
extension = rfc2459.Extension()
extension.setComponentByName('extnID', '2.5.29.19')
extension.setComponentByName('critical', True)
extension.setComponentByName('extnValue', extn_val)
我尝试将最后一行更改为:
extension.setComponentByName('extnValue', univ.OctetString(extn_val))
这从 PyASN1 引发了这个错误:
Component value is tag-incompatible: OctetString(hexValue='30060101ff020105') vs Any()
最近版本中可能导致此问题的更改是什么,以及如何更正我的代码以使其与这两个模块的新版本兼容(并最好使其与以前的版本兼容)。
新版本:pyasn1 0.1.9 和 pyasn1_modules 0.0.8
Ubuntu 存储库版本:pyasn1 0.1.7 和 pyasn1_modules 0.0.3
Python 2.7 版