java - 使用keytool创建服务器证书所需的最少步骤数

标签 java ssl-certificate keytool jks

我想创建一个“公司”自签名证书,该证书将用于对公司中的所有其他证书进行签名。我的目标是仅将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/

相关文章:

java - 查找文件中的特定行,将该行及其后的 2 行写入新文件

java - 是什么导致了 java.lang.ArrayIndexOutOfBoundsException 以及如何防止它?

certificate - 服务器证书验证失败。 CAfile :/etc/ssl/certs/ca-certificates. crt CRLfile:无

java - 自签名 jar 文件,找不到 JarSigner 类

java - Openssl 未被识别为内部或外部命令

Java版本平台和开发者版本

java - 如何让 JButton 在恢复其原始颜色之前改变颜色一段时间

.htaccess - 以编程方式在 MAMP Pro 上针对特定页面强制使用 https(不是站点范围且不使用 .htaccess)

ssl - SoapUI:连接已关闭:javax.net.SSLHandshakeException

java - 我不能用 keytool 做什么,而我可以用 OpenSSL 做什么?