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 キーストアにも追加されます (regular を使用してテスト済み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 に答える