【问题标题】:HttpClient : hostname didn't match - accessible from browser but not from codeHttpClient:主机名不匹配 - 可从浏览器访问,但不能从代码访问
【发布时间】:2017-01-06 16:43:53
【问题描述】:

我正在尝试使用 HttpClient 从我的代码访问网站:

CloseableHttpClient httpclient = HttpClients.createDefault();

HttpGet httpget = new HttpGet("https://www.datamed.org/search.php?query=gene&searchtype=data");

ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httpget, responseHandler);

这是我得到的错误:

Exception in thread "main" javax.net.ssl.SSLException: hostname in certificate didn't match: <www.datamed.org> != <ucrexdc.ucsd.edu> OR <ucrexdc.ucsd.edu>

我从浏览器检查了证书,它似乎正确,名称正确。 不确定从哪里接收ucrexdc.ucsd.edu

如果我使用代理,代码确实有效。 在 StackOverflow 上经历了很多类似的问题,但在大多数情况下,服务器都在用户的控制之下。就我而言,这是一个已经存在的网站。我只有这个网站有这个问题。

可能是我的环境有问题吗?

更新:

我发现两个网站(datamed.orgucrexdc.ucsd.edu)具有相同的 IP,169.228.51.21。会不会有问题,为什么浏览器没有这个问题?

更新 2:

我使用的是 apache http-client 4.3.1
当我更新到4.4.1 时,它得到了解决。该问题很可能与 SNI 有关。

【问题讨论】:

  • 已经看到,它提出了一种解决方法,不应该在产品代码中使用。此外,我还想知道是什么导致了这种情况发生
  • @ScaryWombat 新手,在示例中没有看到任何 Keystore 代码。我可以在没有任何密钥库的情况下连接到 google.com。另外,datamed.org 不在我的服务器上。
  • 浏览器可以正常工作,因为它支持 SNI (en.wikipedia.org/wiki/Server_Name_Indication)。您使用的是哪个版本的 Java?
  • @msbit 我正在使用 Java 1.8

标签: java apache-httpclient-4.x


【解决方案1】:

HttpClient 提供了两种主机名验证的实现。

  1. 默认主机名验证器
  2. NoopH​​ostnameVerifier

默认情况下 HttpClient 使用 DefaultHostnameVerifier 实现。您可以尝试不同的主机名验证器实现。

SSLContext sslContext = SSLContexts.createSystemDefault();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext,  NoopHostnameVerifier.INSTANCE);
HttpClient httpClient = HttpClientBuilder.create().setSSLSocketFactory(sslsf).build(); 

【讨论】:

  • 永远不要在生产代码中这样做。我遇到过太多这样的情况。这是在乞求劫持或攻击。了解 TLS 的工作原理以及如何涉及证书。不要这样做。
  • @DaveG 感谢戴夫提供的信息。你知道 TLS 的好文档吗?
  • 这可能是一个很好的起点sans.org/reading-room/whitepapers/protocols/…。在这个主题上有大量资源可供您使用。我会提出一个stackoverflow问题。系统可能会提示您其他类似或确切的问题。
猜你喜欢
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多