Apache HttpClient将域名解析为IP地址,但不匹配证书



当使用Apache HttpComponents HttpClient库(4.0.2)时,我遇到了证书没有得到正确验证的问题。证书对域名是有效的(我们叫它example.com)但它是针对IP地址进行验证的:

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

我建立连接的代码是:

    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地址而不是域名吗?

似乎是一个已知的错误HttpClient 4.0.2 - https://issues.apache.org/jira/browse/HTTPCLIENT-996该错误建议执行以下任何操作:

  • 升级到4.0.3或更高版本
  • 降级到4.0.1
  • 使用AllowAllHostnameVerifier

相关内容

最新更新