我正在使用 Unirest for Java 向 https 网站发出 HTTP 请求,但我遇到了 SSL 证书问题。异常消息 - javax.net.ssl.SSLException:证书中的主机名不匹配:
页面:www.ceskereality.cz
如果我在浏览器中打开它(我在 Windows 10 上使用谷歌浏览器),它可以工作...
我试过了,还是不行
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);
最佳答案
服务端要求客户端使用Server Name Indication (SNI)以获得正确的证书。如果未使用 SNI,则返回 ci.cz
而不是 ceskereality.cz
的证书,这会导致您看到的错误。
我不熟悉 Unirest,但您使用的库可能不支持 SNI,或者您使用的是未启用 SNI 的旧 Java 版本。
关于java - 如何修复证书中的主机名不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53870373/