X509v3 証明書を作成し、DER でエンコードしてファイルに保存しようとしています。Ubuntu 14.04 で PyASN1 0.1.7 と Python 2.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)
cert
DER エンコーダーでオブジェクトをエンコードしようとすると、次のエラーが発生します。
pyasn1.type.error.ValueConstraintError: ConstraintsIntersection(ConstraintsIntersection(), ValueSizeConstraint(1, 64)) failed at: "ValueSizeConstraint(1, 64) failed at: "Extensions()""
コードの問題のある部分に関する提案をいただければ幸いです。
PS 誰かが PyASN1 を使用して拡張機能を備えた X509v3 証明書を作成する方法に関する実用的なサンプル コードを持っている場合は、ぜひご覧ください。