【发布时间】:2016-03-15 04:52:37
【问题描述】:
我一直在创建一些用于测试目的的证书。一切都很顺利,直到我需要在证书的主题中包含一个 x500UniqueIdentifier。在配置文件中指定字段 x500UniqueIdentifier 很容易,但是,生成的证书与我可用的示例证书不一致,因为底层 ASN.1 类型是错误的。 IE。不是 BITSTRING。
考虑 openssl 配置文件(称为 leaf.conf):
[req]
default_bits = 256
default_md = sha256
distinguished_name = req_dn
prompt = no
encrypt_key = no
[req_dn]
OU = 00
x500UniqueIdentifier = SomeText
以及以下命令:
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 已被编码为 PrintableString。我想做的是将其编码为 BITSTRING。此外,我不想要 ASCII 文本,我想将字节序列指定为十六进制。也就是说,我想做这样的事情:
[req_dn]
OU = 00
x500UniqueIdentifier = ASN1:BITSTRING:HEX:0123456789
但是,OpenSSL 似乎总是将其编码为字符串(包括 ASN1: 部分)。查看 OpenSSL 的手册页对上述内容有所了解,尤其是与编码任意 x509v3 扩展相关的部分。
我知道这是可能的,因为我有一些示例证书(不是使用 OpenSSL 创建的),我相信这可以通过直接与 C 中的 OpenSSL API 接口来实现,但我希望有一种更简单的方法。
任何建议将不胜感激。
【问题讨论】: