Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Samolisov  
#1 Оставлено : 29 октября 2009 г. 17:35:44(UTC)
Samolisov

Статус: Новичок

Группы: Участники
Зарегистрирован: 29.10.2009(UTC)
Сообщений: 4
Откуда: Челябинск

Здравствуйте. Есть проблема. С помощью класса Client (который поставляется в samples/JTLS_samples) пытаюсь проверить работоспособность TLS соединения с демо-сайтом КриптоПро: https://www.cryptopro.ru:9443/cryptopro/products/csp/test/tls-cli.asp

Указываю системные параметры:
System.setProperty("javax.net.ssl.trustStore", "E:\\my.truststore");

truststore запаролен, но пароль я не указываю. По хорошему JCP должен ругаться, но нет, он спокойно соединяется и скачивает страничку, на которой написано:

Защищенное соединение установлено
Сертификат пользователя предоставлен

Для отображения данных сертификата пользователя используется функция
Request.ClientCertificate( Key[SubField] )

Далее табличка с параметрами сертификата.

Но! Я ведь не предоставлял никакого сертификата, более того, truststore запаролен и проверка, есть ли в нем сертификат сайта КриптоПро не проверялась.

Так же у меня на машине установлен CSP 3.0 Если заходить по адресу https://www.cryptopro.ru:9443/cryptopro/products/csp/test/tls-cli.asp из IE - все нормально, выскакивает окошко выбора сертификата (в списке есть только сертификаты, выданные УЦ КриптоПро, так и должно быть? Выданные другими УЦ не должны быть в этом списке?). Если сертификат не выбрать - возвращается страничка на которой написано:

Защищенное соединение установлено
Сертификат пользователя не предоставлен

Объясните пожалуйста. Как правильно создавать сокет и как указывать системные параметры, чтобы он на них правильно реагировал. Т.е., чтобы ругался, если сертификата сервера нет в truststore и чтобы передавал на сервер свой сертификат, если он есть в keystore.

Заранее спасибо.
Offline Samolisov  
#2 Оставлено : 29 октября 2009 г. 19:28:03(UTC)
Samolisov

Статус: Новичок

Группы: Участники
Зарегистрирован: 29.10.2009(UTC)
Сообщений: 4
Откуда: Челябинск

Я понял откуда клиент берет свой сертификат. Он ищет подходящий сертификат во всех ключевых контейнерах, которые есть на машине клиента и доступны JCP. Этот факт описан в документации, просто я его не сразу понял.

Сейчас меня интересует вопрос - почему созданный или дефолтной фабрикой или с помощью SSLSocketFactoryImpl сокет при соединении с сервером не проверяет сертификат сервера. Т.е. я указываю javax.net.ssl.trustStore путь к truststore в котором явно нет сертификата сервера, но при этом соединение все равно корректно устанавливается и данные с сервера загружаются. Это ошибка JCP или нужно явно указать, что сертификатам, отсутствующим в truststore доверять не следует?
Offline Iva  
#3 Оставлено : 30 октября 2009 г. 14:51:27(UTC)
Iva

Статус: Активный участник

Группы: Участники
Зарегистрирован: 09.10.2008(UTC)
Сообщений: 181

Думаю дело в следующем. У Вас на машине есть контейнер, сделанный на тестовом УЦ Крипто Про, который содержит цепочку сертификатов до центра, т.е. корневой сертификат УЦ Крипто Про. Этот контейнер используется для аутентификации. Корневой сертификат Вашего собственного центра автоматически считается доверенным. Сертификат сервера сделан на том же УЦ, поэтому можно постоить цепочку сертификатов до центра.
Offline Samolisov  
#4 Оставлено : 2 ноября 2009 г. 12:15:08(UTC)
Samolisov

Статус: Новичок

Группы: Участники
Зарегистрирован: 29.10.2009(UTC)
Сообщений: 4
Откуда: Челябинск

Спасибо за ответ.

Правильно ли я понимаю, что если сертификат сайта, с которым пытаешься организовать TLS-соединение есть хотя бы в одном из ключевых контейнеров, то truststore фактически игнорируется?

И второй вопрос: умеет ли КриптоПро JTLS сам проверять есть ли сертификат сайта к которому пытаешься подключиться в truststore (предположим, ключевых контейнеров нет, есть только truststore) и если его там нет - оборвать соединение (например, выбросить эксепшн)?
Offline Iva  
#5 Оставлено : 2 ноября 2009 г. 16:22:19(UTC)
Iva

Статус: Активный участник

Группы: Участники
Зарегистрирован: 09.10.2008(UTC)
Сообщений: 181

Не совсем так. TrustStore не игнорируется. Для TrustStore Вы задаете тип хранилища ( по умолчанию "HDImageStore") и место (в Вашем случае "E:\\my.truststore"). Все сертификаты в этом хранилище считаются доверенными, в том числе сертификаты, которые находятся в контейнерах этого хранилища. JCP tls при установлении соединения пытается построить цепочку от сертификата клиента или сервера до любого доверенного сертификата из указанного Вами хранилища. Если ему это не удалось, соединения не будет. Сертификаты из контейнера не привилегированные, а равные со всеми остальными.
"HDImageStore" состоит из двух частей: контейнеров (не зависит от файла хранилища, а только от пользователя) и списка доверенных серификатов, который хранится в файле. Контейнеры из "HDImageStore" будут присутствовать в хранилище независимо от указанного места. Если Вы хотите исключить сертификаты контейнеров конкретного хранилища, можно выбрать другой тип хранилища.
Offline Samolisov  
#6 Оставлено : 3 ноября 2009 г. 16:33:26(UTC)
Samolisov

Статус: Новичок

Группы: Участники
Зарегистрирован: 29.10.2009(UTC)
Сообщений: 4
Откуда: Челябинск

Все, теперь понял. Спасибо вам за ответы.
Offline Zverik  
#7 Оставлено : 11 ноября 2009 г. 22:05:57(UTC)
Zverik

Статус: Участник

Группы: Участники
Зарегистрирован: 07.05.2009(UTC)
Сообщений: 16
Откуда: Санкт-Петербург

Только что удивился такому решению, но ок. Это позволяет не перезапускать томкат при выпуске новых сертификатов.
Но как тогда запрещать отдельным сертификатам вход на портал?
Теоретически это делается через «чёрный список» и сайт УЦ, но если у серверной машины закрыт выход в интернет?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.