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


10

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

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

   openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout myserver.key -out myserver.crt

但是,我需要添加扩展的密钥用法字符串服务器身份验证(1.3.6.1.5.5.7.3.1),我无法在上面的命令中弄清楚该怎么做。

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

[= default ]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1

但是,我收到一条错误消息,“找不到-extfile选项”


1
(CLI)openssl配置文件使我确信,编写代码来生成我想要的证书更加容易。我使用了golang,但我猜您可以使用openssl clib。
节奏拳头

Answers:


9

虽然openssl x509用途-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

在默认配置文件(可能/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

如注释中所示,您可能可以省去大多数DN字段。对于HTTPS的使用,我认为您所需要的只是一个与主机名匹配的CN。


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

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


1
如果仅通过此命令行生成CSR,则使用-reqexts'my server exts'要求CA稍后使用服务器auth增强密钥用法生成证书。
memetech
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.