使用Java keytool时如何向证书添加多个密钥用法

use*_*401 3 java keytool x509certificate

我正在尝试在使用java keytool生成证书时向证书添加多个关键用法.它只是拿起列出的最后一个.

keytool -genkeypair -keystore keystore.jks -validity 3650 -alias test 
        -keysize 2048 -keyalg RSA -storetype JKS 
        -ext KeyUsage=digitalSignature -ext KeyUsage=keyEncipherment 
         -ext KeyUsage=keyCertSign
Run Code Online (Sandbox Code Playgroud)

文档说您可以多次使用-ext参数.我究竟做错了什么?

wal*_*orn 5

-ext可以多次给出,但不能用于相同类型的扩展.你想要的是什么

keytool -genkeypair -keystore keystore.jks -validity 3650 -alias test 
    -keysize 2048 -keyalg RSA -storetype JKS 
    -ext KeyUsage=digitalSignature,keyEncipherment,keyCertSign
Run Code Online (Sandbox Code Playgroud)

多个-ext用于分别定义不同类型的扩展.例如这样:

keytool -genkeypair -keystore keystore.jks -validity 3650 -alias test
    -keysize 2048 -keyalg RSA -storetype JKS
    -ext KeyUsage=digitalSignature,keyEncipherment,keyCertSign
    -ext ExtendedKeyUsage=serverAuth,clientAuth
    -ext BasicConstraints=ca:true,PathLen:3
    -ext SubjectAlternativeName=DNS:foo.bar.com,EMAIL:foo@bar.com
    -ext CRLDistributionPoints=URI:http://foo.bar.com/ca.crl
Run Code Online (Sandbox Code Playgroud)

这是一个人为的例子,但你明白了.