【问题标题】:How to specify datatype of x509 configuration attributes in OpenSSL如何在 OpenSSL 中指定 x509 配置属性的数据类型
【发布时间】: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 接口来实现,但我希望有一种更简单的方法。

任何建议将不胜感激。

【问题讨论】:

    标签: openssl x509 asn.1


    【解决方案1】:

    解决了自己的问题后,胜利的甜蜜滋味。

    简而言之,openssl 命令行应用程序不支持我试图做的事情。仅 v3 扩展支持 ASN.1 表示法。如果我更好地阅读手册页,我会看到以下内容:

    任何其他字段都将被视为 DirectoryString。

    查看更多信息:https://www.openssl.org/docs/manmaster/apps/req.html

    但是,相关问题:Certificate subject X.509 提供了足够的提示,表明我想做的事情并不愚蠢。主要是,X.520 规范将唯一标识符定义为 BITSTRINGS,而不是 DirectoryStrings。

    所以最后我为 OpenSSL 打了一个小补丁,可以正确处理 x500UniqueIdentifier,配置文件可以写成:

    [req_dn]
    OU                      = 00
    x500UniqueIdentifier    = 0x0123456789
    

    如果有其他人尝试这样做,可以在这里找到补丁:http://pastebin.com/ua1uebTD

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-05
      • 2022-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多