1

Apache HTTPS クライアントに関する奇妙な問題に直面しています。基本認証がオンになっている外部 HTTPS Web サイトに接続しようとしています (SSL サーバー認証のみ)。これが私のテストと結論の要約です。

  • Chrome/Firefox/IE のいずれかを使用して Web サイトに接続します -> 成功

  • 使用javax.net.ssl.HttpsURLConnection-> 成功

  • DefaultHttpClientまたはのいずれかを使用SystemDefaultHttpClient-> 失敗

「javax.net.debug」を「ssl」に有効にしてデバッグしてみました。両方のクライアントが同じトラスト ストア (デフォルトの JDK トラスト ストア) を選択し、同じプロトコル (TLSv1) を使用していることに気付きました。しかし、違いはここにありました

次の拡張子がJDKによって返されたことに気付きました

拡張サーバー名、サーバー名: [ホスト名: ウェブサイトのホスト名]

上記の拡張子が Apache Web クライアントのデバッグ ログにありませんでした。

また、私が見たもう1つの違いは、証明書チェーンにありました

JDKネイティブからの以下の応答

* Certificate chain chain [0] = [ [ Version: V3 Subject: **CN=websitename , OU=Domain Control Validated - RapidSSL(R), OU=See www.rapidssl.com/resources/cps (c)13, OU =GT17702541、SERIALNUMBER=Q2La1fpFlFdNy4kUCIehYlMvw6bq64Ch 署名アルゴリズム: SHA1withRSA、OID = 1.2.840.113549.1.1.5

Apacheクライアントでは、次の

chain [0] = [ [ Version: V3 Subject: EMAILADDRESS=root@i4319, CN=i4319 , OU=SomeOrganizationalUnit, O=SomeOrganization, L=SomeCity, ST=SomeState, C=-- 署名アルゴリズム: SHA1withRSA, OID = 1.2 .840.113549.1.1.5

そして明らかに、Apache httpsクライアントで次の例外が発生します。

Exception in thread "main" javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

戻って JDK ネイティブ クライアントを使用するために作業をやり直す前に、何が起こっているのか知りたいと思います。この動作に関する洞察をいただければ幸いです。

4

1 に答える 1

3

多くの検索の後、この奇妙な問題は、Apache クライアントでの SNI サポートの欠如が原因であると思われます。問題と考えられる解決策について説明している JIRA はこちらです。

https://issues.apache.org/jira/browse/HTTPCLIENT-1119

ここで可能な作業

https://wiki.apache.org/HttpComponents/SNISupport

于 2013-08-01T16:59:31.210 に答える