2013-07-31 4 views
1

Я столкнулся с странной проблемой 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, я хотел бы знать, что происходит. Любое понимание этого поведения было бы оценено.

+1

Я действительно не имеют понятия (SSLSocketFactory, лежащий в основе клиента Apache HTTP в конечном счете это то же, что и JDK для HTTPSURLConnection), но первое, что приходит в голову, может быть настройкой прокси-сервера, вы должны включить отладку «проводов» и проверить, проходит ли один клиент или другой один из них ... Прокси-серверы хороший ген рейтинг поддельных сертификатов, когда они делают SSL-фильтрацию. – GPI

+0

Если вы говорите про прокси в моей сети, то я должен сказать, что я никогда не настраивал его (например, в браузере). – javadeveloper

ответ

Смежные вопросы