Java クライアントでの SSL 証明書検証のオーバーライド
自己署名または期限切れの SSL 証明書を使用してサーバーに接続する場合、デフォルトの Java 動作は次のようになります。接続を拒否します。このような接続を許可するには、主に 2 つのオプションがあります。
オプション 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 中国語 Web サイトの他の関連記事を参照してください。