覆蓋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中文網其他相關文章!