使用 openssl 生成自签名证书时如何添加扩展密钥用法字符串

jos*_*shu 13 mac-osx openssl windows-server-2012

我在 Mac OS X 10.9 上使用 openssl 为 Windows Server 远程桌面服务生成自签名证书。

使用下面的命令我可以生成证书,

   openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout myserver.key -out myserver.crt
Run Code Online (Sandbox Code Playgroud)

但是,我需要添加一个扩展的密钥用法字符串服务器身份验证 (1.3.6.1.5.5.7.3.1)并且我无法弄清楚如何在上面的命令中执行此操作。

我曾尝试将 openssl 选项-extfile与包含此文件的文件一起使用,

[= default ]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1
Run Code Online (Sandbox Code Playgroud)

但是,我收到“未找到-extfile 选项”的错误消息

Chr*_*sen 14

openssl x509uses 时-extfile,您使用的命令openssl req, 需要-config指定配置文件。

所以,你可以使用这样的命令:

openssl req -x509 -config cert_config -extensions 'my server exts' -nodes \
            -days 365 -newkey rsa:4096 -keyout myserver.key -out myserver.crt
Run Code Online (Sandbox Code Playgroud)

可分辨名称位的通常提示在默认配置文件(可能/System/Library/OpenSSL/openssl.cnf在 OS X 上)中定义,但在您使用时不会处理此文件-config,因此您的配置文件还必须包含一些 DN 位。因此,上面引用的cert_config可能看起来像这样:

[ req ]
prompt             = no
distinguished_name = my dn

[ my dn ]
# The bare minimum is probably a commonName
            commonName = secure.example.com
           countryName = XX
          localityName = Fun Land
      organizationName = MyCo LLC LTD INC (d.b.a. OurCo)
organizationalUnitName = SSL Dept.
   stateOrProvinceName = YY
          emailAddress = ssl-admin@example.com
                  name = John Doe
               surname = Doe
             givenName = John
              initials = JXD
           dnQualifier = some

[ my server exts ]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1
# 1.3.6.1.5.5.7.3.1 can also be spelled serverAuth:
# extendedKeyUsage = serverAuth

# see x509v3_config for other extensions
Run Code Online (Sandbox Code Playgroud)

如评论中所示,您可能可以省略大部分 DN 字段。对于 HTTPS 使用,我认为您只需要一个与您的主机名匹配的 CN。


专有名称和属性科格式部分REQ(1)所示,你可以如何修改上面的配置,以提示输入值(并提供默认值),如果你想生成多个类似的证书/请求。

如果您需要其他证书扩展,请检查 x509v3_config(5) 以了解您可以在扩展部分中指定的其他位。

  • 如果您只是使用此命令行生成 CSR,则使用 -reqexts 'my server exts' 请求 CA 稍后生成具有服务器身份验证增强密钥用法的证书。 (2认同)

k_o*_*_o_ 9

对于较新的 OpenSSL 版本,这一切都可以在单个命令行上完成,无需创建配置文件。该选项-addext也被添加到req命令中 。有关扩展密钥用法的可能值的完整列表,请查看配置手册

一个完整的例子:

openssl req -x509 -nodes -newkey rsa:2048 -keyout key.pem -out server.pem -days 7300 -subj '/CN=My Name/C=US/OU=My Unit/O=ACME' -addext "keyUsage = digitalSignature, keyEncipherment, dataEncipherment, cRLSign, keyCertSign" -addext "extendedKeyUsage = serverAuth, clientAuth"
Run Code Online (Sandbox Code Playgroud)