У меня возникла странная проблема с клиентом Apache HTTPS. Я пытаюсь подключиться к внешнему веб-сайту HTTPS, на котором включена базовая аутентификация (только аутентификация сервера SSL). Вот краткое изложение моих тестов и выводов.
Используйте любой из Chrome/Firefox/IE для подключения к веб-сайту -> успех
Используйте
javax.net.ssl.HttpsURLConnection
-> успехИспользуйте либо
DefaultHttpClient
, либоSystemDefaultHttpClient
-> отказ
Я попытался отладить, включив «javax.net.debug» для «ssl». Я заметил, что оба клиента выбирают одно и то же хранилище доверия (хранилище доверия JDK по умолчанию) и используют один и тот же протокол (TLSv1). Однако здесь были отличия
Я заметил, что следующее расширение было возвращено JDK
Имя_сервера расширения, имя_сервера: [имя_хоста: имя_хоста_сайта]
в то время как вышеуказанное расширение отсутствовало в журнале отладки веб-клиента Apache.
Кроме того, еще одно отличие, которое я увидел, было в цепочке сертификатов.
Приведенный ниже ответ от родного JDK
* Цепочка цепочек сертификатов [0] = [ [ Версия: V3 Тема: **CN=имя веб-сайта, OU=Подтвержден контроль домена — RapidSSL(R), OU=См. www.rapidssl.com/resources/ cps (c)13, OU=GT17702541, SERIALNUMBER=Q2La1fpFlFdNy4kUCIehYlMvw6bq64Ch Алгоритм подписи: SHA1withRSA, OID = 1.2.840.113549.1.1.5
в то время как в клиенте apache следующее
chain [0] = [ [ Версия: V3 Тема: EMAILADDRESS=root@i4319, CN=i4319, OU=SomeOrganizationalUnit, O=SomeOrganization, L=SomeCity, ST=SomeState, C=-- Подпись Алгоритм: SHA1 с RSA, OID = 1.2.840.113549.1.1.5
и, очевидно, я получаю следующее исключение с клиентом apache https.
Exception in thread "main" javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
Прежде чем я вернусь и переделаю свою работу, чтобы использовать собственный клиент JDK, я хотел бы знать, что происходит. Любое понимание этого поведения будет оценено.