我想创建一个“公司”自签名证书,该证书将用于对公司中的所有其他证书进行签名。我的目标是仅将Java keytool
用于此目的。
我的第一步是在“组织范围”的信任库密钥库中创建公司自签名证书:keytool -genkeypair -keystore truststore.jks -storepass changeit -alias ca -keypass changeit -dname CN=ca,OU=dev,O=myorg
然后,我在其自己的服务器密钥存储区中创建了另一个服务器证书,生成了CSR,最后用上面刚刚生成的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 -importcert -keystore server.jks -storepass changeit -alias server -keypass changeit -file server.cer
我遇到以下错误:
keytool错误:java.lang.Exception:无法通过回复建立链
为了克服这个问题,我从信任库中导出了自签名证书,并将其导入到服务器密钥库中: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
用于此目的,也不想涉及cacerts
。可能吗?
最佳答案
从我所看到的,您需要导入CA证书的公钥,以便导入签名的证书。不知道如果在之后删除它会发生什么...我猜是它将破坏证书。将cacert包含在服务器证书中怎么了?
This post包含Windows Power Shell脚本,该脚本使用keytool创建CA证书,服务器证书,客户端证书和信任库。它包括一些可能有用的扩展...值得一看。
希望这可以帮助。
最好,
高手
关于java - 使用keytool创建服务器证书所需的最少步骤数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41414769/