HttpClient请求出现PKIX path building failed错误

问题描述:

javaWeb项目在本地正常运行,拿到同事电脑上也正常运行。但是打包放到服务器发现失败,报的错误大致如下:

PKIX path building failed:sun.security.provider.certpath.SunCertPathBuilderException:ubable to find valid certification path to requested target ...

跟踪了下代码,发现抛这个异常的地方是代码中一处通过httpClient进行网络请求的地方,请求的URL是https类型的。但是比较怪的是在本机以及同事的电脑上都能正常,为何到服务器上不行了?

最初怀疑是不是服务器上的网络限制了Tomcat应用发起网络请求,但是经过核查,发现并没有。后来发现本地的jdk以及同事的jdk版本都是1.7,但是服务器上的jdk版本是1.8。后来又看到有人说应该是jdk对证书不信任,所以失败。

解决方法

有两种解决方法

一、一种是代码一劳永逸,参考这里,我没有去验证这个,不评价行不行,路过的大大可以试一试。

二、下载代码中要请求的url对应的证书,然后倒入到jdk信任中。

操作步骤:

我要访问的url前缀是:https://oapi.dingtalk.com/

1.在谷歌中输入该地址,然后点击输入栏左侧的小锁,会有证选项,点击证书,弹出的页面中,选择详细信息,如下:

2.然后点击,复制到文件,是一个到处证书的过程。

3.这一步直接选择默认即可。然后下一步是保存到本地。

这里,我们假设保存后的证书文件未 taobao.cer。

4.拷贝证书文件到 %JAVA_HOME%/jre/bin/路径下

5.打开命令行,切换到%JAVA_HOME%/jre/bin/目录下,执行如下命令:

keytool -import -v -trustcacerts -alias taobao -file taobao.cer -storepass changeit -keystore %JAVA_HOME%/jre/lib/security/cacerts

执行过程中,会提示“是否信任证书?[否]”,输入“y”即可。

导入成功后。

重新运行tomcat,再试一下,发现问题搞定了,不再报错!

导入证书参考这里。

猜你喜欢

转载自blog.csdn.net/liangcha007/article/details/84661532