我使用nCipher HSM来存储我的秘密密钥,我想生成具有自定义扩展名(备用名称,证书策略和名称约束)的自定义CSR。
我正在FIPS模式下运行HSM,这意味着私钥不能离开HSM,而必须由HSM直接创建。因此,我无法使用openssl生成CSR。 (使用openSSL引擎可能会发生这种情况,但这似乎需要大量工作。)
使用KeyTool和自定义的安全提供程序,我能够连接到HSM来管理HSM中的密钥。例如:
keytool -list -v -keystore new_key_store_name.jks -storepass <mypassword> -storetype ncipher.sworld -providername nCipherKM
现在,我想使用类似的方法来创建一些自定义CSR。我正在使用此命令,它适用于“基本” CSR。
keytool -certreq -alias <myalias> -file csr.txt -sigalg SHA256withECDSA -keystore new_key_store_name.jks -storepass <mypassword> -storetype ncipher.sworld -providername nCipherKM
我无法执行的操作是向其添加扩展请求。在openssl中,我能够使用配置文件添加扩展请求,但是如上所述,我认为openssl不能使用此自定义安全提供程序。这是我用于测试的openssl conf摘录。
[...]
####################################################################
[ server_req_extensions ]
subjectKeyIdentifier = hash
basicConstraints = CA:FALSE
extendedKeyUsage = serverAuth,clientAuth
keyUsage = digitalSignature, keyEncipherment
subjectAltName = @alternate_names
nsComment = "OpenSSL Generated Certificate"
certificatePolicies = 2.23.146.1.2.1.2
nameConstraints = permitted;IP:192.168.0.0/255.255.0.0
nameConstraints = permitted;email:max.somedomain.com
####################################################################
[ alternate_names ]
otherName=1.1.2.1;UTF8:"random-name"
这是我的问题:有没有办法告诉keytool添加这些扩展名?也许使用类似的配置文件? (计划A) 还是有办法让OpenSSL使用HSM安全提供程序? (计划B)
我使用Java代码通过HSM在CSR中操纵ASN1取得了一些成功,但这是非常繁琐的练习。 (计划C)
先谢谢大家。
答案 0 :(得分:0)
看来您可以使用-ext
来做到这一点。因此,将它们添加到您的命令行中:
-ext KeyUsage:critical="digitalSignature, keyEncipherment" \
-ext BasicConstraints:critical="ca:False" \
etc..