我正在使用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);
答案 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版本一起使用。