首頁 >Java >java教程 >如何在 Java 中處理自簽名或過期的 SSL 憑證?

如何在 Java 中處理自簽名或過期的 SSL 憑證?

Susan Sarandon
Susan Sarandon原創
2025-01-01 10:15:11983瀏覽

How to Handle Self-Signed or Expired SSL Certificates in Java?

覆蓋Java 用戶端中的SSL 憑證驗證

連接到具有自簽章或過期SSL 憑證的伺服器時,預設Java 行為是拒絕連線。要允許此類連接,您有兩個主要選項:

選項1:將憑證新增至信任庫

這涉及透過匯入伺服器的憑證來建立信任鏈進入JVM 的信任庫:

<JAVA_HOME>/bin/keytool -import -v -trustcacerts \
-alias server-alias -file server.cer \
-keystore cacerts.jks -keypass changeit \
-storepass changeit

選項2:停用憑證驗證

不建議此方法,因為它會削弱安全性,但可以使用以下程式碼來完成:

// Create a trust manager that doesn't validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] {
    new X509TrustManager() {
        public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; }
        public void checkClientTrusted(X509Certificate[] certs, String authType) {}
        public void checkServerTrusted(X509Certificate[] certs, String authType) {}
    }
};

// Install the all-trusting trust manager
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

// Access the HTTPS URL without certificate validation
URL url = new URL("https://hostname/index.html");

建議

為了增強安全性,強烈建議避免停用憑證驗證(選項2),而是使用信譽良好的CA來簽署您的憑證伺服器的憑證(或將自簽名憑證匯入信任庫)。

以上是如何在 Java 中處理自簽名或過期的 SSL 憑證?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn