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 アドレスを使用する理由はありますか?