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