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

How to fix Hostname in certificate didn't match

我正在为 Java 使用 Unirest 向 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);

下载服务器证书并将其放入您的 cacerts 并重新启动您的 java 应用程序。

服务器要求客户端使用Server Name Indication (SNI)以获得正确的证书。如果未使用 SNI,则返回 ci.cz 而不是 ceskereality.cz 的证书,这会导致您看到的错误。

我不熟悉 Unirest,但您使用的库可能不支持 SNI,或者您使用的是未启用 SNI 的旧 Java 版本。