Вопрос по ssl рукопожатию и поведению в java - PullRequest
2 голосов
/ 21 мая 2011

Я использую https для подключения к серверу https.
В частности, я использую apache httpclient и настраиваю контекст ssl для использования моего хранилища ключей и хранилища доверенных сертификатов.
Используемый мной сервер https - IIS7, и он настроен требует аутентификации клиента.
Я думаю, что настроил ее правильно.
В любом случае, если я сконфигурирую ssl-контекст httpClent с хранилищем ключей (то есть с сертификатами клиента), действительным для IIS, то естьнет проблем с подключением.

Теперь моя проблема заключается в следующем: Если я не настраиваю контекст ssl с любым клиентским сертификатом для отправки в IIS, соединение с сервером отсутствует.Что заставляет меня задуматься, так это тот факт, что я ожидал увидеть какое-то исключение java в коде в результате предупреждения о сбое hanshake.
Наблюдая за тем, что происходит с wireshark, я не смог увидеть запрос сертификата от IIS длямое приложение, но я заметил, что после ServerHelloDone все было зашифровано.
Я не ожидал этого.Я думаю, что рукопожатие обычно выполняется в виде открытого текста.
Я использовал закрытый ключ для расшифровки трасс и увидел запрос на сертификат от IIS, но после многих запусков и открытий новых соединений.
Мое приложение отправляет обратно в ответ сертификатдлина 0 и IIS отвечает с помощью TLSv1 Завершено .
После этого пакеты останавливаются (т.е. кажется, что связь заканчивается).
Я ожидал оповещения о рукопожатии.

У меня вопрос , это так, как он должен работать или хотя бы как работает IIS?
Или, если я не вижу предупреждения, что-то не так с моим вариантом использования?

Спасибо

Ответы [ 3 ]

1 голос
/ 21 мая 2011

Похоже, что для IIS требуются клиентские сертификаты только для определенных URL-адресов (например, example.com/foo, но не example.com/bar).

В начальном рукопожатии он не знает, какой URL вы запрашиваете, поэтому ему не требуется сертификат. Когда он видит, что вы запрашиваете ограниченный ресурс (/ foo), он выполняет повторную проверку, требуя сертификат.

Однако я все еще ожидал бы, что произойдет рукопожатие_отказ.

0 голосов
/ 27 мая 2011

Как я уже говорил в ответ на этот вопрос , насколько я помню, IIS использует повторное согласование для получения сертификата клиента.Вы должны иметь возможность изменить это поведение, используя netsh и clientcertnegotiate=enable (в зависимости от используемой версии IIS).

Возможно, вас также заинтересует этот аналогичный вопрос .

0 голосов
/ 23 мая 2011

Невозможность предоставить сертификат в ответ на CertificateRequest не является ошибкой протокола SSL, поэтому handshake_error отсутствует. «Требование» вместо того, чтобы просто «требовать» клиентские сертификаты, добавляется библиотеками SSL, и все, что они могут сделать, если вы не отправляете один, - просто закрыть соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...