问题描述:
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,再试一下,发现问题搞定了,不再报错!
导入证书参考这里。