java https x509trustmanager,java – 没有X509TrustManager实现可用
时间: 2023-09-14 16:03:04 浏览: 60
这个问题是因为在使用 HTTPS 进行请求时,Java 默认会验证 SSL 证书,如果证书不被信任或者不是由受信任的机构颁发的,就会抛出 "没有 X509TrustManager 实现可用" 的异常。
解决这个问题的方法是创建一个自定义的 X509TrustManager 实现类,然后在代码中使用该实现类来验证 SSL 证书。以下是一个简单的示例代码:
```java
import javax.net.ssl.*;
import java.security.cert.X509Certificate;
public class MyX509TrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType) {}
public void checkServerTrusted(X509Certificate[] chain, String authType) {}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
// 在代码中使用自定义的 X509TrustManager 实现类
HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[]{new MyX509TrustManager()}, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
```
以上代码中,我们先创建了一个名为 MyX509TrustManager 的自定义实现类,然后在代码中使用该实现类来进行 SSL 证书验证。注意,这里我们将默认的 HostnameVerifier 设置为了一个始终返回 true 的实现类,这是为了避免由于证书中的主机名和实际主机名不一致而导致的 SSL 异常。