問題の説明
外部モジュールをアプリケーションに統合するには、SSL へのアクセスが必要です- 自己署名証明書を使用した安全な Web サイト。証明書の信頼性に問題があるため、既存のコードは失敗します。課題は、他の接続の信頼性を損なったり、システム全体の証明書ストアを変更したりすることなく、アプリケーションがこの特定の接続に対してのみこの自己署名証明書を受け入れることができるようにすることです。
最適なソリューション
特定の接続に対して自己署名証明書を選択的に信頼するには、カスタム 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 中国語 Web サイトの他の関連記事を参照してください。