javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building f
ailed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certificatio
n path to requested target
解决问题参考文档:Java 和 HTTP 的那些事(四) HTTPS 和 证书 - aneasystone's blog
该文档介绍了https原理,并介绍了代码、添加证书两种方式解决问题。
最终这边是选择了添加证书方式来解决。(Windows环境)
注意:上面链接介绍的是linux下添加证书的命令,但是最后window环境用同样的命令依然可用。
1、文章里面这段使我对jdk又有了新的认识
和浏览器和操作系统类似,Java 在 JRE 的安装目录下也保存了一份默认可信的证书列表,这个列表一般是保存在 $JRE/lib/security/cacerts
文件中。要查看这个文件,可以使用类似 KeyStore Explorer 这样的软件,当然也可以使用 JRE 自带的 keytool 工具(后面再介绍),cacerts 文件的默认密码为 changeit
(但是我保证,大多数人都不会 change it)。
2、添加证书到jdk的JRE/lib/security/cacerts文件中
首先,获得网址对应的证书,保存到本地。
其次,利用命令把证书导入到jdk中
删除证书:
keytool -delete -alias bocommca -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit
==================以上就是httpClient访问https证书信任问题解决=====================
然后httpClient调接口的代码按正常调用就可以正常访问了!