【发布时间】:2021-06-27 10:55:49
【问题描述】:
这个问题已经被问过很多次了。
答案总是“将证书添加到信任库”。
我必须通过一个奇怪的代理服务器工作,它总是发送不同的自签名证书。 因此添加到信任库是不切实际的。
唯一的选择是禁用 SSL 证书验证。 我有这个代码,但它没有帮助:( 有什么建议吗?
(顺便说一句,我不关心安全性,我们在内部使用此代码进行测试)
@Slf4j
public class TrustAllX509TrustManager implements X509TrustManager {
@SneakyThrows({ KeyManagementException.class,
NoSuchAlgorithmException.class })
public static void disableSslCertificateValidation() {
log.debug("turning off SSL certificate validation");
val sslContext = SSLContext.getInstance("TLS");
sslContext.init(null,
new TrustManager[] { new TrustAllX509TrustManager() },
new java.security.SecureRandom());
HttpsURLConnection
.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
HttpsURLConnection
.setDefaultHostnameVerifier((string, ssls) -> true);
}
@Override
public void checkClientTrusted(
final java.security.cert.X509Certificate[] certs,
final String authType) {
// nothing to do here
}
@Override
public void checkServerTrusted(
final java.security.cert.X509Certificate[] certs,
final String authType) {
// nothing to do here
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
【问题讨论】:
标签: java ssl ssl-certificate