Apache HttpClient を使用した無効な SSL 証明書の処理
Apache HttpClient を使用して SSL 経由で安全な HTTP 接続を確立すると、無効な SSL 証明書を示すエラーが発生する場合があります。 SSL証明書。このエラーは、リモート サーバーが Java Trust Managerset によって信頼されていない証明書を提示した場合に発生します。
考えられる解決策:
この問題を解決するには、いくつかの方法があります。以下を実行できます:
受け入れ可能な TrustManager を使用して SSLContext を構成します:
有効性に関係なく、任意の証明書を受け入れるカスタム TrustManager を作成します。このアプローチは、SSL 接続のセキュリティを損なうため、運用環境では推奨されません。
<code class="java">// Configure SSLContext with a TrustManager that accepts any certificate SSLContext ctx = SSLContext.getInstance("TLS"); ctx.init(null, new TrustManager[] {new DefaultTrustManager()}, new SecureRandom()); SSLContext.setDefault(ctx);</code>
コード例:
次のコード サンプルは、最初のソリューションで提案されているように、任意の証明書を受け入れる SSLContext を作成する方法を示しています。 :
<code class="java">import java.net.URL; import java.security.SecureRandom; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.KeyManager; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; public class SSLTest { public static void main(String [] args) throws Exception { // configure the SSLContext with a TrustManager SSLContext ctx = SSLContext.getInstance("TLS"); ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()}, new SecureRandom()); SSLContext.setDefault(ctx); URL url = new URL("https://remote-server-address"); HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setHostnameVerifier(HostnameVerifier.ALL); // temporarily disable strict hostname verification System.out.println(conn.getResponseCode()); conn.disconnect(); } private static class DefaultTrustManager implements X509TrustManager { @Override public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {} @Override public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {} @Override public X509Certificate[] getAcceptedIssuers() { return null; } } }</code>
注: このような受け入れ側 TrustManager の使用は、テストとデバッグの目的でのみ考慮する必要があり、運用環境では使用しないでください。
以上がApache HttpClient で無効な SSL 証明書を処理する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。