使用keytool

时间:2017-01-01 10:25:17

标签: java ssl-certificate keytool jks

我想创建一个"公司"自签名证书,用于签署公司的其他证书。我的目标是仅为此目的使用Java keytool

我的第一步是在整个组织范围内创建企业自签名证书" truststore 密钥库:

keytool -genkeypair -keystore truststore.jks -storepass changeit -alias ca -keypass changeit -dname CN=ca,OU=dev,O=myorg

然后,我在其自己的服务器密钥库中创建了另一个 - 服务器 - 证书,生成了CSR,最后使用上面生成的{{1自签名证书:

ca

keytool -genkeypair -keystore server.jks -storepass changeit -alias server -keypass changeit -dname CN=server,OU=dev,O=myorg

keytool -certreq -keystore server.jks -storepass changeit -alias server -keypass changeit -file server.csr

现在,当我尝试在服务器密钥库中重新导入 - 现已签名 - 服务器证书时:

keytool -gencert -keystore truststore.jks -storepass changeit -alias ca -keypass changeit -infile server.csr -outfile server.cer

我收到了以下错误:

keytool错误:java.lang.Exception:无法建立回复链

要克服,我已从 truststore 导出自签名证书,并将其导入服务器密钥库:

keytool -importcert -keystore server.jks -storepass changeit -alias server -keypass changeit -file server.cer

keytool -exportcert -keystore truststore.jks -storepass changeit -alias ca -keypass changeit -file ca.cer

最后,重新导入服务器证书,这次成功。

虽然这可行,但我对该解决方案感到不舒服:导入自签名证书,然后导入由其签名的服务器证书。

我正在寻找keytool -importcert -keystore server.jks -storepass changeit -alias ca -keypass changeit -file ca.cer -noprompt操作序列,这将允许我生成证书请求,通过自签名证书对其进行签名,并将该证书导入密钥存储区,而无需导入根证书:服务器证书应该是服务器存储中唯一的证书。

我不想将keytool用于此目的,也不想涉及openssl。可能吗?

1 个答案:

答案 0 :(得分:0)

从我看到的情况来看,您需要导入CA证书的公钥才能导入签名证书。不确定如果你删除后会发生什么......我的猜测是它会破坏证书。在服务器证书中使用cacert有什么问题?

This post包含一个Windows Power Shell脚本,该脚本使用keytool创建CA证书,服务器证书,客户端证书和信任存储。它包括可能有用的扩展......值得一看。

希望这有帮助。

最佳, 王牌