48

我知道您可以通过在openssl.cfg文件中添加如下一行来指定证书公钥的用途:

extendedKeyUsage=serverAuth,clientAuth

但是由于我要创建几个证书,每个证书都有不同的扩展密钥用法,是否可以在命令行中指定我需要的属性(不使用 openssl.cfg 文件)?就像是:

openssl req -newkey rsa:4096 \
            -extendedKeyUsage "serverAuth,clientAuth" \
            -keyform PEM \
            -keyout server-key.pem \
            -out server-req.csr \
            -outform PEM

谢谢!

4

6 回答 6

39

你只能使用这样的东西:

openssl -extensions mysection -config myconfig.cnf

和 myconfig.cnf:

[mysection]
keyUsage         = digitalSignature
extendedKeyUsage = codeSigning

我不知道此功能的命令行界面。

于 2013-11-19T15:22:51.353 回答
14

我最终做的是创建几个不同的 openssl.cfg 文件,并通过使用-config-extfile开关来引用正确的文件。

于 2013-06-13T16:23:52.667 回答
14

你可以试试addext:

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt \
    -subj '/CN=User1' \
    -addext extendedKeyUsage=1.3.6.1.4.1.311.80.1 \
    -addext keyUsage=keyEncipherment

适用于openssl 1.1.1a

于 2020-01-29T21:54:32.840 回答
6

与处理 SAN 相同 openssl req -subj "/CN=client" -sha256 -new -key client-key.pem -out client.csr\ -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:example.com,DNS:www.example.com\nextendedKeyUsage=serverAuth,clientAuth"))

于 2018-07-30T08:40:20.707 回答
3

Mike Twc,https: //stackoverflow.com/users/7775187/mike-twc绝对正确!不幸的是,没有足够的声誉将他的答案标记为正确并为他的答案添加扩展名,所以我写了一个新答案......您需要使用-addext,但请记住key->value参数在这里,所有值必须用逗号分隔。

openssl req -x509 -nodes -newkey rsa:4096 -keyout efs.key -out efs.crt -days 36500 -subj '/CN=EFS/O=Company' -addext 'extendedKeyUsage=1.3.6.1.4.1.311.10.3.4,1.3.6.1.4.1.311.10.3.4.1'
于 2020-05-19T07:44:00.873 回答
2

使用最新版本的 OpenSSL,您可以使用-addext选项添加扩展密钥用法

对于您的具体情况,这应该如下所示:

openssl req -newkey rsa:4096 \                          
            -addext "extendedKeyUsage = serverAuth, clientAuth" \
            -keyform PEM \
            -keyout server-key.pem \
            -out server-req.csr \
            -outform PEM

您可以使用以下命令验证输出:

openssl req -noout -text  -in server-req.csr

一个更常见的用例是同时设置主题密钥用法

用同样的例子:

openssl req -newkey rsa:4096 \
            -subj '/CN=My Name' \
            -addext "keyUsage = digitalSignature,keyAgreement" \
            -addext "extendedKeyUsage = serverAuth, clientAuth" \
            -keyform PEM \
            -keyout server-key.pem \
            -out server-req.csr \
            -outform PEM
于 2021-09-07T13:03:42.293 回答