如何修复证书中的主机名不匹配

时间:2018-12-20 14:14:55

标签: java ssl unirest

我正在使用Unirest for Java向HTTPS网站发出HTTP请求,但是SSL证书有问题。异常消息-javax.net.ssl.SSLException:证书中的主机名不匹配:

页面:www.ceskereality.cz

如果我在浏览器中打开它(我在Windows 10上使用的是Google Chrome),它就可以工作...

我尝试了这个,但是没有用

SSLContext sslcontext = SSLContexts.custom()
                .loadTrustMaterial(null, new TrustSelfSignedStrategy())
                .build();

SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext,SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
CloseableHttpClient httpclient = HttpClients.custom()
                .setSSLSocketFactory(sslsf)
                .build();
Unirest.setHttpClient(httpclient);

2 个答案:

答案 0 :(得分:0)

下载服务器证书并将其放入cacert中,然后重新启动Java应用程序。

答案 1 :(得分:0)

服务器要求客户端使用Server Name Indication (SNI)才能获得正确的证书。如果未使用SNI,则返回Windows 10 Ruby 2.5.3 Rails 5.2.2 而不是ci.cz的证书,这将导致您看到错误。

我对Unirest不熟悉,但是您使用的库可能不支持SNI,或者您将其与未启用SNI的Java版本一起使用。