javaxnetsslSSLHandshakeException Failed to parse server certificates。java httpclient 代码怎么处理可以忽略这个错误吗?
在Java HttpClient中,可以通过配置SSLContext来忽略SSL握手异常,具体代码如下:
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
public class HttpClientIgnoreSSLHandshakeException {
public static void main(String[] args) throws NoSuchAlgorithmException, KeyManagementException {
// 创建信任管理器,用于忽略SSL握手异常
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {}
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
};
// 创建SSL上下文,并设置信任管理器
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustAllCerts, null);
// 创建SSL连接工厂,并设置SSL上下文
SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());
// 创建HttpClient实例,并设置SSL连接工厂
CloseableHttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(sslSocketFactory)
.build();
// 使用httpClient发送请求
// ...
// 关闭httpClient连接
httpClient.close();
}
}
在上面的代码中,我们创建了一个信任管理器trustAllCerts,该管理器忽略了所有的SSL握手异常。然后,我们创建了SSL上下文sslContext,并将信任管理器设置到上下文中。接下来,我们创建了SSL连接工厂sslSocketFactory,并将SSL上下文设置到工厂中。最后,我们创建了HttpClient实例httpClient,并将SSL连接工厂设置到httpClient中。
请注意,忽略SSL握手异常存在安全风险,因为它将接受所有证书,包括无效或伪造的证书。在生产环境中,建议使用有效的证书或配置信任的证书来解决SSL握手异常
原文地址: https://www.cveoy.top/t/topic/iDsy 著作权归作者所有。请勿转载和采集!