在 Java 中进行 HTTPS 请求时,默认情况下会对服务器返回的证书进行验证。如果服务器返回的证书在 Java 的信任列表中,则认为是可信的;如果不在信任列表中,则会抛出异常。
如果需要对服务器返回的证书进行自定义验证,可以通过自定义 TrustManager 来实现。下面是一个简单的示例代码:
import javax.net.ssl.*;
public class CustomTrustManager 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 null;
}
public static void main(String[] args) throws Exception {
SSLContext sslContext = SSLContext.getInstance("TLS");
TrustManager[] trustManagers = {new CustomTrustManager()};
sslContext.init(null, trustManagers, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
// 发起 HTTPS 请求
URL url = new URL("https://example.com");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.connect();
}
}
在上面的示例中,我们自定义了一个 TrustManager 来实现证书验证逻辑,并将其设置为默认的 SSLSocketFactory。这样在发起 HTTPS 请求时,就会使用我们自定义的证书验证逻辑来验证服务器返回的证书。
需要注意的是,自定义证书验证逻辑可能会导致安全风险,应根据具体需求和安全要求来决定是否使用。