2017-10-04 264 views
0

我對Java的8使用Apache的HttpClient(4.5.2),我得到這個錯誤:的Java SNI無法識別的名字

javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name

我知道我可以,使用得到解決:

System.setProperty("jsse.enableSNIExtension", "false");

但是,如果我這樣做,其他https網站無法連接到了。

從這兩個站點,我只能連接到一個取決於我是否能SNI或沒有,但我還沒有找到一個設置,允許我連接到這兩個成功地:

任何人都可以重現或解決了這個問題嗎?

回答

0

引發此異常是因爲服務器返回的證書與您請求的FQDN不匹配。在客戶端禁用SNI不是適當的解決方案,而是必須禁用主機名驗證,如HttpClient doc

SSLContext sslContext = SSLContexts.createSystemDefault(); 
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
    sslContext, 
    NoopHostnameVerifier.INSTANCE);