在 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 請求時,就會使用我們自定義的證書驗證邏輯來驗證服務器返回的證書。
需要注意的是,自定義證書驗證邏輯可能會導致安全風險,應根據具體需求和安全要求來決定是否使用。