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