2017-08-26 101 views
0

我有一個遠程服務器,它可能使用有效的SSL證書(使用自簽名SSL證書)運行,也可能不運行。如何使用Apache HTTP客戶端API獲取遠程服務器不可信SSL證書

我們正在連接遠程服務器,如果遠程服務器使用自簽名SSL證書,則可能會失敗。所以,如果我們的SSL握手失敗,我們希望能夠下載/查看遠程服務器證書。

如果我使用Apache HTTP客戶端,那麼我找不到可以讓我查看遠程服務器證書的方法(您可以使用HttpsURLConnection執行此操作,但我們正在嘗試避免使用它)see this example)。

我也看了一下Spring RestTemplate,它沒有提供任何選項 - 我在Google上搜索,沒有找到任何有關Spring或Apache HTTP Client的內容。

回答

1

這應該會給你幾乎完全控制信任驗證的過程。

SSLContext sslContext = SSLContextBuilder.create() 
     .loadTrustMaterial((chain, authType) -> { 
      for (X509Certificate cert: chain) { 
       System.out.println(cert.getSubjectDN()); 
      } 
      // Let the standard trust managers decide 
      // whether or not the cert chain is trusted 
      return false; 
     }) 
     .build(); 

CloseableHttpClient client = HttpClientBuilder.create() 
     .setSSLContext(sslContext) 
     .build(); 
相關問題