2024-04-25 01:25:35 发布
网友
使用Python和PyOpenSSL,是否有方法检索自定义扩展的值?所谓自定义扩展,我指的是使用http://www.openssl.org/docs/apps/x509v3_config.html处任意扩展下描述的任意扩展格式编码的扩展。
另外,是否可以使用PyOpenSSL创建包含此类扩展的证书?
如果这两个问题的答案都是“否”,我也会对如何使用任何其他Python库来实现这一点的指针感兴趣。我不想对OpenSSL命令行应用程序执行系统调用。
获取X.509证书的任何扩展名,例如get subjectAltName:
cert = crypto.load_certificate(crypto.FILETYPE_ASN1, open(certName).read()) for index in range(cert.get_extension_count()): ext = cert.get_extension(index) if 'subjectAltName' == ext.get_short_name(): print(str(ext)) else: pass
您可以在使用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自动编码。这似乎排除了添加任意非字符串扩展数据的可能性。
获取X.509证书的任何扩展名,例如get subjectAltName:
您可以在使用pyOpenSSL加载的X.509证书上获得任何和所有扩展。例如:
数据以原始格式(ASN.1的一些编码,可能取决于特定的扩展名)输出。
您还可以添加扩展名。
然而,请注意轻微的不对称性。扩展数据必须是字符串,并使用ASN.1自动编码。这似乎排除了添加任意非字符串扩展数据的可能性。
相关问题 更多 >
编程相关推荐