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

Java Apache HttpClient正在将域解析为IP地址,但证书不匹配,java,httpclient,apache-httpcomponents,Java,Httpclient,Apache Httpcomponents,在使用ApacheHttpComponents HttpClient库(4.0.2)时,我遇到了一个问题,证书没有得到正确验证。该证书对域名(我们称之为example.com)有效,但它将根据IP地址进行验证: 证书中的主机名不匹配:= 我建立连接的代码是: HttpParams httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams, 5000);

在使用ApacheHttpComponents HttpClient库(4.0.2)时,我遇到了一个问题,证书没有得到正确验证。该证书对域名(我们称之为example.com)有效,但它将根据IP地址进行验证:

证书中的主机名不匹配:=

我建立连接的代码是:

    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的一个已知错误- 该错误表明存在以下任何一种情况:

  • 升级至4.0.3或更新版本
  • 降级至4.0.1
  • 使用AllowlHostNameVerifier

因此当涉及SSL时,无法将域解析为IP。因此,您不能使用IP证书来保护域。很高兴知道。谢谢