如何将自签名证书正确导入默认情况下对所有 Java 应用程序可用的 Java 密钥库?

新手上路,请多包涵

我确实想将自签名证书导入 Java,以便任何尝试建立 SSL 连接的 Java 应用程序都将信任此证书。

到目前为止,我设法将其导入

keytool -import -trustcacerts -noprompt -storepass changeit -alias $REMHOST -file $REMHOST.pem
keytool -import -trustcacerts -noprompt -keystore cacerts -storepass changeit -alias $REMHOST -file $REMHOST.pem

不过,当我尝试运行 HTTPSClient.class 时,我仍然得到:

 javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

原文由 sorin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 441
1 个回答

在 Windows 上,最简单的方法是使用程序 portecle

  1. 下载并安装 portecle。
  2. 首先要 100% 确定您知道正在使用哪个 JRE 或 JDK 来运行您的程序。在 64 位 Windows 7 上可能有相当多的 JRE。 Process Explorer 可以帮助您解决这个问题,或者您可以使用: System.out.println(System.getProperty("java.home"));
  3. 将文件 JAVA_HOME\lib\security\cacerts 复制到另一个文件夹。
  4. 在 Portecle 中单击文件 > 打开密钥库文件
  5. 选择 cacerts 文件
  6. 输入此密码:changeit
  7. 单击工具 > 导入受信任的证书
  8. 浏览文件 mycertificate.pem
  9. 点击导入
  10. 对于有关信任路径的警告,单击确定。
  11. 当它显示有关证书的详细信息时单击确定。
  12. 单击“是”接受该证书作为可信证书。
  13. 当它要求输入别名时,单击“确定”,当它说已导入证书时再次单击“确定”。
  14. 点击保存。不要忘记这一点,否则更改将被丢弃。
  15. 将文件 cacerts 复制回您找到它的位置。

在 Linux 上:

您可以从已经使用它的 Web 服务器下载 SSL 证书,如下所示:

 $ echo -n | openssl s_client -connect www.example.com:443 | \
   sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/examplecert.crt

可选地验证证书信息:

 $ openssl x509 -in /tmp/examplecert.crt -text

将证书导入 Java cacerts 密钥库:

 $ keytool -import -trustcacerts -keystore /opt/java/jre/lib/security/cacerts \
   -storepass changeit -noprompt -alias mycert -file /tmp/examplecert.crt

原文由 Sarel Botha 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题