Apache HttpClient разрешает домен по IP-адресу и не соответствует сертификату - PullRequest
4 голосов
/ 27 октября 2011

При использовании библиотеки 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 Ответ

2 голосов
/ 27 октября 2011

Кажется, что это известная ошибка в HttpClient 4.0.2 - https://issues.apache.org/jira/browse/HTTPCLIENT-996 Ошибка предполагает любое из следующего:

  • Обновление до версии 4.0.3 или новее
  • Понижение до 4.0.1
  • Использовать AllowAllHostnameVerifier
...