首頁 >Java >java教程 >如何在 Java 中為特定 SSL 連線設定自訂憑證信任?

如何在 Java 中為特定 SSL 連線設定自訂憑證信任?

Susan Sarandon
Susan Sarandon原創
2024-12-18 13:48:14837瀏覽

How to Set Custom Certificate Trust for Specific SSL Connections in Java?

為目標連線設定自訂憑證信任

問題陳述

將外部模組整合到應用程式中需要存取SSL - 使用自簽名憑證的安全網站。由於證書的信任問題,現有程式碼失敗。面臨的挑戰是使應用程式能夠僅針對此特定連接接受此自簽名證書,而不損害對其他連接的信任或修改系統範圍的證書儲存。

最佳解決方案

要選擇性地信任特定連接的自簽名證書,請建立自訂SSLSocket 工廠並在建立HttpsURLConnection 之前將其設定連接:

...
HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
conn.setSSLSocketFactory(sslFactory);
conn.setMethod("POST");
...

建立SSLSocket工廠

要建立 SSLSocket工廠,請如下初始化它:

/* Load the keyStore that includes self-signed cert as a "trusted" entry. */
KeyStore keyStore = ... 
TrustManagerFactory tmf = 
  TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keyStore);
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, tmf.getTrustManagers(), null);
sslFactory = ctx.getSocketFactory();

載入金鑰庫

載入包含以下內容的金鑰庫自簽章憑證作為「可信任條目」:

KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(trustStore, trustStorePassword);
trustStore.close();

替代金鑰儲存載入方法

或者,使用keytool 將 PEM 格式憑證匯入金鑰商店:

keytool -import -file selfsigned.pem -alias server -keystore server.jks

以上是如何在 Java 中為特定 SSL 連線設定自訂憑證信任?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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