Openssl 自定义扩展

use*_*353 3 command-line-interface openssl x509

我知道如何使用 openssl 命令行创建 x509 证书。但现在我想用自定义扩展创建一个。如何使用 openssl 命令行执行此操作?

mr.*_*tic 7

这是在签署 S/MIME 用户证书时添加一组 S/MIME 客户端功能扩展的示例,取自OpenSSL 邮件列表中的示例

[my_cert_extensions]
basicConstraints         = CA:FALSE
keyUsage                 = critical, keyEncipherment, dataEncipherment
SMIME-CAPS               = ASN1:SEQUENCE:smime_seq
subjectKeyIdentifier     = hash
authorityKeyIdentifier   = keyid,issuer

[ smime_seq ]
SMIMECapability.0 = SEQWRAP,OID:sha1
SMIMECapability.1 = SEQWRAP,OID:sha256
SMIMECapability.2 = SEQWRAP,OID:sha1WithRSA
SMIMECapability.3 = SEQWRAP,OID:aes-256-ecb
SMIMECapability.4 = SEQWRAP,OID:aes-256-cbc
SMIMECapability.5 = SEQWRAP,OID:aes-256-ofb
SMIMECapability.6 = SEQWRAP,OID:aes-128-ecb
SMIMECapability.7 = SEQWRAP,OID:aes-128-cbc
SMIMECapability.8 = SEQWRAP,OID:aes-128-ecb
SMIMECapability.9 = SEQUENCE:rsa_enc

[ rsa_enc ]
capabilityID = OID:rsaEncryption
parameter = NULL
Run Code Online (Sandbox Code Playgroud)

这是通过使用openssl命令行选项等方式激活的-extensions my_cert_extensions

拼图还有两个部分:

  • 有关如何构建扩展数据的更多详细信息,请参见此处的 OpenSSL API 文档,但您需要对ASN.1OID有所了解才能理解这一点。
  • 如果您的分机真的是定制的,那么你或许应该适用于IANA一个企业专用号(这是必须的,如果您的扩展可以在野外可以看到)

如果您希望使用现有扩展程序添加文本,通常会更容易一些,如果您有:

[ CA_default ]
...
x509_extensions = usr_cert

[ usr_cert ]
basicConstraints=CA:FALSE
...
nsComment = "This is my comment"
Run Code Online (Sandbox Code Playgroud)

CA_default在正常的 CA 签名期间使用,如果您可以使用预定义的扩展名,那么您只需将其添加到该usr_cert部分,不需要额外的命令行选项。(nsComment在技​​术上已弃用,但它仍然有效,这是一个简单的示例,可以在常见浏览器的证书属性中轻松查看)。

请参阅解释扩展基础知识的x509v3_config手册页,以及 OpenSSL 源代码crypto/objects/objects.txt以了解有些神秘的细节(该文件被处理并用于生成代码)。

OID 通常与离散概念相关联,例如名词动词属性甚至一些不太有形的东西(例如 UUID,但具有层次结构)。nsComment具有定义的含义(证书内的自由格式文本注释),其他类似keyUsage具有更严格的语义。

在 OpenSSL 中,名称“nsComment”映射到 OID 2.16.840.1.113730.1.13,如objects.txt. X.509v3 证书中的每个扩展都有一个 OID,请参阅/sf/ask/1070944101/

如果 OpenSSL 中没有合适的扩展(参见RFC 5280 §4.2 证书扩展),您可以找到一个并添加它(参见x509v3_config上面链接的手册页中的“任意扩展”部分)。否则,您将需要为自己的目的定义 OID。