【问题标题】:Openssl x509v3 Extended Key UsageOpenssl x509v3 扩展密钥用法
【发布时间】:2013-06-13 14:38:30
【问题描述】:

我知道您可以通过在 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

谢谢!

【问题讨论】:

    标签: openssl x509certificate


    【解决方案1】:

    你只能使用这样的东西:

    openssl -extensions mysection -config myconfig.cnf
    

    和 myconfig.cnf:

    [mysection]
    keyUsage         = digitalSignature
    extendedKeyUsage = codeSigning
    

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

    【讨论】:

    • 我明白了:unable to find 'distinguished_name' in config
    • @MarinosAn,给定的配置仅包含与问题相关的部分。您可能需要提供更多额外参数。这超出了原始问题的范围。
    【解决方案2】:

    你可以试试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

    【讨论】:

    • 序列1.3.6.1.4.1.311.80.1 代表什么?应该替换为extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection?
    • 这是 Microsoft 特定扩展 (PKI)(我猜 openssl 中没有对应的名称)这更像是一个示例,您可以使用 OID 而不是使用名称(您可能不知道)
    • @cactuschibre 它不适用于旧版本。你用的是哪一个?
    【解决方案3】:

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

    【讨论】:

    • 你可能想“接受”你自己的答案(这样它就不会再显示为未回答的问题了)
    【解决方案4】:

    与处理 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"))

    【讨论】:

      【解决方案5】:

      Mike Twc,https://stackoverflow.com/users/7775187/mike-twc 绝对正确!不幸的是,没有足够的声誉将他的答案标记为正确并为他的答案添加扩展名,所以我写了一个新答案...... 需要使用-addext,但要记住key-&gt;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'
      

      【讨论】:

      • 您可以为该答案添加评论,而不是单独的答案
      • @dtech 由于等级限制,我之前做不到
      【解决方案6】:

      使用最新版本的 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
      

      一个更常见的用例是同时设置subjectkey usage

      同样的例子:

      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
      

      【讨论】:

        猜你喜欢
        • 2016-02-20
        • 1970-01-01
        • 1970-01-01
        • 2019-08-15
        • 2011-09-11
        • 1970-01-01
        • 2020-03-15
        • 2013-10-02
        • 2017-07-07
        相关资源
        最近更新 更多