阅读量:0
在 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 请求时,就会使用我们自定义的证书验证逻辑来验证服务器返回的证书。
需要注意的是,自定义证书验证逻辑可能会导致安全风险,应根据具体需求和安全要求来决定是否使用。