問題陳述
將外部模組整合到應用程式中需要存取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中文網其他相關文章!