如何将自签名证书正确导入到所有 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 path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

答案 1

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

  1. 下载并安装便携式设备。
  2. 首先,请确保您100%确定知道哪个JRE或JDK用于运行程序。在64位Windows 7上,可能会有相当多的JRE。进程资源管理器可以帮助您解决此问题,或者您可以使用:System.out.println(System.getProperty("java.home"));
  3. 将文件JAVA_HOME\lib\security\cacerts 复制到另一个文件夹。
  4. 在 Portecle 中单击文件>打开密钥库文件
  5. 选择 cacerts 文件
  6. 输入此密码:更改
  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

答案 2
    D:\Java\jdk1.5.0_10\bin\keytool -import -file "D:\Certificates\SDS services\Dev\dev-sdsservices-was8.infavig.com.cer" -keystore "D:\Java\jdk1.5.0_10\jre\lib\security\cacerts" -alias "sds certificate"

推荐