如何将自签名证书正确导入默认情况下可供所有 Java 应用程序使用的 Java 密钥库?
我确实想将自签名证书导入 Java,以便任何尝试建立 SSL 连接的 Java 应用程序都信任此证书.
I do want to import a self signed certificate into Java so any Java application that will try to establish a SSL connection will trust this certificate.
到目前为止,我设法将它导入
So far, I managed to import it in
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
我仍然得到:
Still, when I try to run HTTPSClient.class
I still get:
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.
On Windows the easiest way is to use the program portecle.
- 下载并安装 portecle.
- 首先要 100% 确定您知道使用哪个 JRE 或 JDK 来运行您的程序.在 64 位 Windows 7 上可能有很多 JRE.Process Explorer 可以为您提供帮助,或者您可以使用:
System.out.println(System.getProperty("java.home"));
- 将文件 JAVA_HOMElibsecuritycacerts 复制到另一个文件夹.
- 在 Portecle 中单击文件 > 打开密钥库文件
- 选择 cacerts 文件
- 输入此密码:changeit
- 点击工具 > 导入可信证书
- 浏览文件 mycertificate.pem
- 点击导入
- 单击确定"以获取有关信任路径的警告.
- 在显示证书详细信息时单击确定".
- 单击是"接受受信任的证书.
- 当它要求输入别名时单击确定",当它说已导入证书时再次单击确定".
- 点击保存.不要忘记这一点,否则更改将被丢弃.
- 将文件 cacerts 复制回您找到它的位置.
在 Linux 上:
您可以像这样从已经在使用它的 Web 服务器下载 SSL 证书:
You can download the SSL certificate from a web server that is already using it like this:
$ 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 密钥库:
Import the certificate into the Java cacerts keystore:
$ keytool -import -trustcacerts -keystore /opt/java/jre/lib/security/cacerts
-storepass changeit -noprompt -alias mycert -file /tmp/examplecert.crt
相关文章