在PyASN1中创建具有扩展名的X509证书时出错

2024-10-01 09:33:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个X509v3证书,并将其按顺序编码并保存到一个文件中。我在ubuntu14.04上使用pyasn10.1.7和python2.7.6。在

代码可以总结如下:

tbs = rfc2459.TBSCertificate()
tbs.setComponentByName('XYZ', xyz)  # other non-problematic certificate fields
....
subjaltname = rfc2459.SubjectAltName()
subjaltname.setComponentByPosition(0, fc2459.GeneralName().setComponentByName('dNSName', 'domain.com'))
extension = rfc2459.Extension()
extension.setComponentByName('extnID', rfc2459.id_ce_subjectAltName)
extension.setComponentByName('critical', univ.Boolean(False))
extension.setComponentByName('extnValue', univ.OctetString(der_encoder.encode(subjaltname)))
extensions = rfc2459.Extensions()
extensions.setComponentByPosition(0, extension)
tbs.setComponentByName('extensions', extensions.subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3)))
cert = rfc2459.Certificate()
cert.setComponentByName('tbsCertificate', tbs)

当我试图用DER编码器对cert对象进行编码时,我得到以下错误:

^{pr2}$

如果您对代码中有问题的部分有任何建议,我们将不胜感激。在

另外,如果有人有关于如何使用PyASN1创建带有扩展的X509v3证书的有效示例代码,我很乐意看到它。在


Tags: 代码编码cert顺序tagextensionextensions证书
1条回答
网友
1楼 · 发布于 2024-10-01 09:33:02

我的猜测是,当你在这里创建扩展对象的子类型时:

tbs.setComponentByName('extensions',extensions.subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3)))

它失去了它的初始值。您可以尝试将cloneValueFlag=True添加到.subtype()以强制它执行深度复制,或者最好在初始化之前执行子类型:

^{pr2}$

另外,启用pyasn1调试可能有助于故障排除。在

相关问题 更多 >