你好,我们服务端调用https://mp.weixin.qq.com/cgi-bin/showqrcode,报错了java.lang.RuntimeException: 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。
查看一下发现是GA证书更新到G2了,我的环境是centos,用tomcat发布的java应用。我将centos中用【update-ca-trust】更新了(ca-bundle.crt),而且在$JAVA_HOME/jre/lib/security中用keytool也添加了。
当我用curl https://mp.weixin.qq.com的时候,已经可行了。但是java应用访问接口,还是报之前的错误,而且重启了tocmat的应用了。这个可能是什么原因呢????
问题已经解决了。大致过程说明一下,希望对大家有帮助。大家可以写个测试类-->TestHttps.class。然后你用 $JAVA_HOME/bin/java -Djavax.net.debug=ssl,trustmanager TestHttps试试,看看依赖的ca库是那个。确定好库之后,再用keytool --list查看是否有有对应的证书,如果没有再用keytool 的import将对应的证书导入即可。
我这边遇到的另外一个坑是,jre使用了自定义证书库jssecacerts,上来导入,都是操作的默认库cacerts。故卡住了很久,所以建议搭建自己写个demo,通过debug的方式知晓自己使用的是那个库,稳妥一点。
另外这个类,正常用HttpsURLConnection请求目标地址就好了,能跑出java.lang.RuntimeException...... PKIX path building failed......即可