使用HttpClient发送Https请求时,出现异常PKIX path building failed: sun.security.provider.certpath.SunCertPathBuil
使用HttpClient发送Https请求时,出现异常为:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target出现这个异常的原因为,客户端向服务器发送htt..
·
使用HttpClient发送Https请求时,出现异常为:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
出现这个异常的原因为,客户端向服务器发送https请求时,会验证服务端的证书状态,可以设置信任所有证书,绕过这一步。
查看HttpClient官方文档,示例如下:
可以直接使用SSLContext来构建实例,代码如下:
public static CloseableHttpClient createSSLClientDefault() {
try {
//使用 loadTrustMaterial() 方法实现一个信任策略,信任所有证书
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
// 信任所有
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
return true;
}
}).build();
//NoopHostnameVerifier类: 作为主机名验证工具,实质上关闭了主机名验证,它接受任何
//有效的SSL会话并匹配到目标主机。
HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
return HttpClients.createDefault();
}
如何直接使用这个方法返回的client对象去发送请求即可
更多推荐
已为社区贡献1条内容
所有评论(0)