java - 如何将自签名证书正确导入默认情况下可供所有 Java 应用程序使用的 Java keystore ?

标签 java certificate ssl-certificate keystore keytool

我确实想将自签名证书导入 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 path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

最佳答案

在 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 中单击文件 > 打开 keystore 文件
  5. 选择 cacerts 文件
  6. 输入此密码:changeit
  7. 点击工具 > 导入可信证书
  8. 浏览文件 mycertificate.pem
  9. 点击导入
  10. 单击“确定”以获取有关信任路径的警告。
  11. 在显示证书详细信息时单击“确定”。
  12. 单击"is"接受受信任的证书。
  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 keystore :

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

关于java - 如何将自签名证书正确导入默认情况下可供所有 Java 应用程序使用的 Java keystore ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11617210/

相关文章:

java - 如何在java中对BigDecimal属性求和

java - Spring Boot 应用程序无法运行 - spring.resources.cache-period 未绑定(bind)

ssl - 哪个 CA 颁发时间戳证书

certificate - 如何从 asp.net 应用程序签署带有数字签名(PKCS12 个人证书)的文档

iphone - 为 APNS 创建 .pem 文件?

android - 安全修复 : javax.net.ssl.SSLPeerUnverifiedException:没有对等证书

java - 在同一位置发布多个子项目 jar

java - Java 中的美元货币格式?

c# - 使用公钥证书激活产品

SSL 对所有主机都失败。 (SSL证书问题: self signed certificate in certificate chain)