HTTPS主机名错误:应该<sub.domain.com>。这是什么原因造成的?

2022-09-01 18:38:29

我在尝试使用https连接到服务器时收到此“HTTPS主机名错误:”错误。我的网址看起来像这样

https://sub.domain.com/tamnode/webapps/app/servlet.

我使用以下代码进行连接

    // Create a URLConnection object for a URL
    URL url = new URL(requestedURL);
    HttpURLConnection.setFollowRedirects(false);

    // connect
    connection = (HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    connection.setRequestProperty("User-Agent", USER_AGENT); //$NON-NLS-1$

    OutputStreamWriter wr = new OutputStreamWriter(connection
            .getOutputStream());

但随后出现错误

IOException: HTTPS hostname wrong:  should be <sub.domain.com>. 
    at sun.net.www.protocol.https.HttpsClient.checkURLSpoofing
    ....

这是过去工作过但不再有效的代码。系统架构发生了一些变化,但我需要在接近负责人之前获得更多数据。

什么可能导致此错误?我可以关闭网址欺骗检查吗?


答案 1

看起来 domain.com 的SSL证书已经给了 sub.domain.com。或者,更有可能的是,domain.com 的内容已重命名为 sub.domain.com,而无需更新 SSL 证书。


答案 2

克莱图斯对可能的原因是正确的。

还有一种方法可以关闭欺骗检查。

您可以创建一个实现 HostnameVerifier 的对象,该对象在比“通常”更多的情况下返回 true。

您可以通过在问题代码中的连接对象上调用 setHostnameVerifier 来替换默认的 HostnameVerifier

这个答案是“灵感来源”:http://www.java-samples.com/showtutorial.php?tutorialid=211

我发现了带有此查询的链接:http://www.google.com/search?q=https+hostname+wrong+should+be

还有一点要注意:在执行此操作之前,请三思而后行。您将在客户端和服务器组件之间的安全性中造成可利用的弱点。