我想创建一个"公司"自签名证书,用于签署公司的其他证书。我的目标是仅为此目的使用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
。可能吗?
答案 0 :(得分:0)
从我看到的情况来看,您需要导入CA证书的公钥才能导入签名证书。不确定如果你删除后会发生什么......我的猜测是它会破坏证书。在服务器证书中使用cacert有什么问题?
This post包含一个Windows Power Shell脚本,该脚本使用keytool创建CA证书,服务器证书,客户端证书和信任存储。它包括可能有用的扩展......值得一看。
希望这有帮助。
最佳, 王牌