如何在OpenSSL中指定x509配置属性的数据类型
我一直在为测试目的创建一些证书。在我需要在证书主题中包含X500唯一标识符之前,一切都进展顺利。在配置文件中指定字段x500UniqueIdentifier很容易,但是,生成的证书与我提供的示例证书不一致,因为基础ASN.1类型错误。即,不是位字符串 考虑openssl配置文件(称为leaf.conf): 和以下命令:如何在OpenSSL中指定x509配置属性的数据类型,openssl,x509,asn.1,Openssl,X509,Asn.1,我一直在为测试目的创建一些证书。在我需要在证书主题中包含X500唯一标识符之前,一切都进展顺利。在配置文件中指定字段x500UniqueIdentifier很容易,但是,生成的证书与我提供的示例证书不一致,因为基础ASN.1类型错误。即,不是位字符串 考虑openssl配置文件(称为leaf.conf): 和以下命令: openssl genrsa -out testkey.pem openssl req -x509 -new -config leaf.conf -key testkey.pem
openssl genrsa -out testkey.pem
openssl req -x509 -new -config leaf.conf -key testkey.pem -outform pem -out test.pem
openssl x509 -in test.pem -noout -subject
它将主题打印为:
subject= /OU=00/x500UniqueIdentifier=SomeText
一切都好
但是,通过检查生成的ASN.1代码,我们可以看到x500UniqueIdentifier已编码为可打印字符串。我想做的是将其编码为位字符串。此外,我不想要ASCII文本,我想要将字节序列指定为十六进制。也就是说,我想这样做:
[req_dn]
OU = 00
x500UniqueIdentifier = ASN1:BITSTRING:HEX:0123456789
然而,OpenSSL似乎总是将其编码为字符串(包括ASN1:part)。通过查看OpenSSL的手册页,可以深入了解上述内容,特别是与编码任意x509v3扩展相关的部分
我知道这是可能的,因为我有一些示例证书(不是用OpenSSL创建的),我相信通过在C中直接与OpenSSL API接口是可能的,但我希望有一种更简单的方法
如果您有任何建议,我们将不胜感激。在解决了我自己的问题之后,我尝到了胜利的甜味 简而言之,openssl命令行应用程序不支持我试图做的事情。ASN.1符号仅支持v3扩展。如果我能更好地阅读手册,我会看到以下内容: 任何其他字段都将被视为DirectoryString 有关更多信息,请参阅: 然而,相关问题:提供了足够的提示,表明我想做的事情并不愚蠢。X.520规范主要将唯一标识符定义为位字符串,而不是目录字符串 最后,我为OpenSSL编写了一个小补丁,可以正确处理x500UniqueIdentifier,配置文件可以写成:
[req_dn]
OU = 00
x500UniqueIdentifier = 0x0123456789
如果其他人尝试此操作,可在此处找到修补程序:
[req_dn]
OU = 00
x500UniqueIdentifier = 0x0123456789