您可以獲得使用pyOpenSSL加載的X.509證書上的任何擴展。例如:
>>> from OpenSSL import crypto as c
>>> cert = c.load_certificate(c.FILETYPE_PEM, file('server.pem').read())
>>> cert.get_extension_count()
4L
>>> ext = cert.get_extension(0)
>>> ext.get_short_name()
'basicConstraints'
>>> ext.get_data()
'0\x00'
>>>
數據以其原始格式(ASN.1的某些編碼,可能取決於具體的擴展名)出現。
您還可以添加擴展。
>>> newext = c.X509Extension('nsComment', 0, 'tacos are delicious')
>>> cert.add_extensions([newext])
>>> cert.get_extension_count()
5L
>>> cert.get_extension(4)
<X509Extension object at 0x7f74db7c2290>
>>> cert.get_extension(4).get_data()
'\x16\x13tacos are delicious'
>>>
但是,請注意輕微的不對稱。擴展數據必須是字符串,並自動使用ASN.1進行編碼。這似乎排除了添加任意非字符串擴展數據的可能性。
任何合適的方式來解碼擴展的原始數據? –
最近的'asn1crypto'庫可能對此有用。 –
好的,謝謝你的回覆 –