-1

Apache HTTPClientを使用してSSL証明書を無視する方法については、私はthisの答えに沿ってクライアントを作成しました。ここまでは順調ですね。問題は、証明書が無効なときに、私があまりにも言ったように、クライアントはそれを盲目的に受け入れます。しかし、私はそれを静かに受け入れたくありません。無効な証明書が受け入れられたことを知らせる警告を記録したいと思います。Apache HTTPClientを使用してSSL証明書のエラーを無視する方法はありますが、ログに記録する方法

これを行う方法はありますか?

P.S .:内部ツール用であり、プロダクトコードではありません。私は証明書を無視するリスクを理解し、受け入れていますので、「あなたよりも聖なる」講義を開始しないでください。

答えて

0

それはSSLContext#init方法

static class TrustManagerDelegate implements X509TrustManager { 

    private final X509TrustManager trustManager; 

    TrustManagerDelegate(final X509TrustManager trustManager) { 
     super(); 
     this.trustManager = trustManager; 
    } 

    @Override 
    public void checkClientTrusted(
      final X509Certificate[] chain, final String authType) throws CertificateException { 
     trustManager.checkClientTrusted(chain, authType); 
    } 

    @Override 
    public void checkServerTrusted(
      final X509Certificate[] chain, final String authType) { 
     try { 
      trustManager.checkServerTrusted(chain, authType); 
     } catch (CertificateException ex) { 
      // Implement proper logging; 
      System.out.println(chain[0]); 
      ex.printStackTrace(System.out); 
     } 
    } 

    @Override 
    public X509Certificate[] getAcceptedIssuers() { 
     return trustManager.getAcceptedIssuers(); 
    } 

} 

に渡さX509TrustManagerインスタンスを飾るだけの単純な問題である...

TrustManagerFactory tmfactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
tmfactory.init((KeyStore) null); 
final TrustManager[] tms = tmfactory.getTrustManagers(); 
if (tms != null) { 
    for (int i = 0; i < tms.length; i++) { 
     final TrustManager tm = tms[i]; 
     if (tm instanceof X509TrustManager) { 
      tms[i] = new TrustManagerDelegate((X509TrustManager) tm); 
     } 
    } 
} 
SSLContext sslContext = SSLContext.getInstance("TLS"); 
sslContext.init(null, tms, null); 

CloseableHttpClient client = HttpClientBuilder.create() 
     .setSSLContext(sslContext) 
     .build(); 
+0

ありがとうございました。私はあなたの答えを受け入れた。 –

+0

'CertificateException'は、失敗したドメイン名を私に伝えるのにかなり役に立たないことが分かります。私は[this](https://stackoverflow.com/a/45091939/839733) –

関連する問題