ホームページ  >  記事  >  Java  >  KeyManager と TrustManager を使用せずに Apache HttpClient で無効な SSL 証明書を処理する方法は?

KeyManager と TrustManager を使用せずに Apache HttpClient で無効な SSL 証明書を処理する方法は?

DDD
DDDオリジナル
2024-11-04 19:58:02136ブラウズ

How to Handle Invalid SSL Certificates in Apache HttpClient Without KeyManager and TrustManager?

Apache HttpClient を使用した無効な SSL 証明書の処理

質問:

Apache HttpClient を使用してHTTPS 接続を確立すると、無効な SSL 証明書に関連するエラーが発生します。 KeyManager と TrustManager の使用を避けながら、これらのエラーを解決するにはどうすればよいですか?

回答:

Apache HttpClient で無効な SSL 証明書を処理するには、次のいずれかのアプローチが必要です。

  • 任意の証明書を受け入れる TrustManager を使用した SSLContext の構成
  • 必要な証明書を含む適切なトラスト ストアを使用した SSLContext の構成
  • デフォルトの Java トラスト ストアへの証明書の追加

任意の証明書に対する TrustManager の実装:

次のコードは、任意の証明書を受け入れる TrustManager を使用して 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://mms.nw.ru");
        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
        conn.setHostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String arg0, SSLSession arg1) {
                return true;
            }
        });
        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>

以上がKeyManager と TrustManager を使用せずに Apache HttpClient で無効な SSL 証明書を処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。