2017-10-04 262 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);