我确实想将自签名证书导入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,仍然会得到:
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。
在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