我有兴趣创建一个包含OID指定的任意扩展的CSR。理想情况下,我希望将值设置为ASN1编码实体,尽管将其设置为字符串就足够了。
各种在线示例指向如下代码:
extensionStack = X509.X509_Extension_Stack()
extension = X509.new_extension('subjectAltName', 'DNS:example.com')
extensionStack.push(extension)
request.add_extensions(extensionStack)
扩展名是从预定义的名称subjectAltName
创建的,然后映射到正确的OID。显然,这些字符串是在objects.txt中定义的,除了重新编译OpenSSL之外,没有办法添加自己的字符串。
The documentation表示可以通过编辑openssl.cnf
添加自定义X509扩展程序。但是,我的理解是,这只会影响从命令行调用OpenSSL的操作。
如何使用M2Crypto执行相同的操作?换句话说,如何让它或多或少地像这样工作?
X509.new_extension('OID:1.2.3.4.5.42', 'test')
#or this
X509.new_extension('OID:1.2.3.4.5.42', '0x1E4...819')
答案 0 :(得分:1)
你几乎拥有它:
ext = X509.new_extension('1.2.3.4',
'ASN1:UTF8String:Some random data')
# If required: ext.set_critical(1)
cert.add_ext(ext)
它将出现在OpenSSL转储中:
1a:91:ca:bf:aa:ba:3b:49:57
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:foobar.example.com
1.2.3.4:
..Some random data
Signature Algorithm: sha1WithRSAEncryption
18:24:4c:42:fe:7c:71:a6:58:ed:be:9d:2e:9e:ea:a7:80:0f:
不幸的是,M2Crypto在检索自定义扩展时遇到问题,除非首先注册它们,并且这些功能目前尚未通过M2Crypto公开。名称和价值将以" UNDEF"和"无"分别。