Apache HttpClient将域解析为IP地址而不是匹配证书

时间:2011-10-26 21:35:38

标签: java httpclient apache-httpcomponents

当使用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();

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

  

CN = * .example.com

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

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

1 个答案:

答案 0 :(得分:2)

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

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