完整异常信息为:
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
问题出现原因是安全证书不信任。
我选择的方法是,发送请求的时候对带https的请求都选择信任
使用okhttp发送post请求pom如下:
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.6.0</version>
</dependency>
代码如下:
public static JSONObject post(String url, HashMap<String, String> paramsMap) {
Map<String, String> map = new HashMap<>();
//设置对所有https证书信任
TrustAllManager trustAllManager = new TrustAllManager();
OkHttpClient.Builder okHttpClientaBuilder = new OkHttpClient.Builder().sslSocketFactory(createTrustAllSSLFactory(trustAllManager), trustAllManager);
//获得client
OkHttpClient okHttpClient = okHttpClientaBuilder.build();
FormBody.Builder formBodyBuilder = new FormBody.Builder();
Set<String> keySet = paramsMap.keySet();
for (String key : keySet) {
String value = paramsMap.get(key);
formBodyBuilder.add(key, value);
}
FormBody formBody = formBodyBuilder.build();
Request request = new Request
.Builder()
.post(formBody)
.url(url)
.build();
JSONObject jason = null;
try {
Response response = okHttpClient.newCall(request).execute();
if (response.code() == 201) {
map.put("message", "success");
map.put("status_code", "201");
jason = JSONObject.parseObject(JSONObject.toJSON(map).toString());
} else {
jason = JSONObject.parseObject(response.body().string());
}
} catch (Exception e) {
e.printStackTrace();
}
return jason;
}
protected static SSLSocketFactory createTrustAllSSLFactory(TrustAllManager trustAllManager) {
SSLSocketFactory ssfFactory = null;
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, new TrustManager[]{trustAllManager}, new SecureRandom());
ssfFactory = sc.getSocketFactory();
} catch (Exception ignored) {
ignored.printStackTrace();
}
return ssfFactory;
}
|
package com.otcbi.util.regwidutils;
import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
public class TrustAllManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
|
博客指出完整异常信息为javax.net.ssl.SSLHandshakeException,问题原因是安全证书不信任。解决方法是在发送请求时对带https的请求选择信任,还给出了使用okhttp发送post请求的pom及代码。
887

被折叠的 条评论
为什么被折叠?



