4

使用 Apache HttpComponents HttpClient 库 (4.0.2) 时,我遇到了证书未正确验证的问题。该证书对域名有效(我们称之为 example.com),但它会根据 IP 地址进行验证:

证书中的主机名不匹配:<123.123.123.123> != <*.example.com>

我建立连接的代码是:

    HttpParams httpParams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
    HttpConnectionParams.setSoTimeout(httpParams, 5000);
    DefaultHttpClient httpClient = new DefaultHttpClient(httpParams);            
    String url = "https://www.example.com";
    HttpGet get = new HttpGet(url);
    HttpResponse httpResponse = httpClient.execute(get);
    String response = EntityUtils.toString(httpResponse.getEntity()).trim();

通过 Web 浏览器连接时,证书本身显示为有效,并且对我要连接的域名有效:

CN = *.example.com

该证书也被添加到 Java 密钥库中(使用常规测试HttpsURLConnection)。

任何想法为什么此代码使用 IP 地址而不是域名?

4

1 回答 1

2

似乎是 HttpClient 4.0.2 的一个已知错误 - https://issues.apache.org/jira/browse/HTTPCLIENT-996 该错误表明以下任何一项:

  • 升级到 4.0.3 或更高版本
  • 降级到 4.0.1
  • 使用 AllowAllHostnameVerifier
于 2011-10-26T21:53:10.643 回答