Java SNI无法识别的名称

时间:2017-10-04 22:01:01

标签: java ssl https apache-httpclient-4.x sni

我使用Apache HttpClient(4.5.2)使用Java 8,我收到此错误:

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

我知道我可以使用:

解决这个问题

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

但如果我这样做,其他https网站将无法再连接。

从这两个站点我只能连接到一个站点,具体取决于我是否启用了SNI,但是我没有找到允许我连接成功的设置:

任何人都可以复制或已经解决了这个问题吗?

1 个答案:

答案 0 :(得分:0)

引发此异常是因为服务器返回的证书与您请求的FQDN不匹配。在客户端禁用SNI不是合适的解决方案,而是必须按照HttpClient doc

中的说明禁用主机名验证
SSLContext sslContext = SSLContexts.createSystemDefault();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
    sslContext,
    NoopHostnameVerifier.INSTANCE);