网站建设公司优惠中,微信小程序模板库,网站生成wap,做网站到a5卖站赚钱使用httpclient对接多个第三方应用#xff0c;云服务形式的接口都没有问题#xff0c;唯独一家私有部署的系统#xff0c;死活握不了手。对方的系统用浏览器访问无误#xff08;https#xff09;。程序访问就是不行#xff1a;
javax.net.ssl.SSLHandshakeException: su… 使用httpclient对接多个第三方应用云服务形式的接口都没有问题唯独一家私有部署的系统死活握不了手。对方的系统用浏览器访问无误https。程序访问就是不行
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 at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1747) at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:241) at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:235) at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1209) at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:135) at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593) at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:943) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1188) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:654) at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:100) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123) at org.apache.commons.httpclient.methods.StringRequestEntity.writeRequest(StringRequestEntity.java:150) at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:495) at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:1973) at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:993) at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:397) at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
奇怪的是同一个程序访问其他家的https接口就没有。
其实核心原因很简单就是java的自身证书库里没有他们家的。按如下步骤操作即可解决问题
1、找对方要证书例如server.cer
2、复制到$JAVA_HOME/jre/lib/security/目录下
3、执行keytool -import -alias mycert -file ./server.cer -keystore ./cacerts -storepass changeit
其中changeit是java证书文件默认访问密码如果改过就需要搜索自己的脑子了。
操作后重启程序问题OK