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

Уведомление

Icon
Error

4 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline Dima_Sun  
#1 Оставлено : 20 ноября 2008 г. 20:03:35(UTC)
Dima_Sun

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

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

Нужна помощь в установлении защищенного соединения с использованием SSPI и взаимной проверкой сертификатов. Все примеры, которые видел либо не используют сертификатов для аутентификации (MSDN), либо только серверный (КриптоПро, пример использования SSPI для WEB)
К сожалению не удалось найти не только примеров, но даже документаци, чтобы узнать последовательность действий. Brick wall
Offline Максим Коллегин  
#2 Оставлено : 21 ноября 2008 г. 3:08:58(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
флаг MANUAL_CRED_VALIDATION говорит SSPI, что не нужно проверять сертификаты - иначе проверяет.
Знания в базе знаний, поддержка в техподдержке
Offline Dima_Sun  
#3 Оставлено : 21 ноября 2008 г. 16:03:45(UTC)
Dima_Sun

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

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

Пока разбирался с проблемой достиг некоторой степени просветления...
Скажите, правильно ли я понимаю:
1. На клиенте при вызове AcquireCredentialsHandle в параметре SchannelCred.paCred надо передать контекст сертификата, который будет использоваться в качестве клиентского. Для автоматической проверки сертификатов установить флаг SCH_CRED_AUTO_CRED_VALIDATION.
2. На стороне сервера при вызове AcquireCredentialsHandle в параметре SchannelCred.paCred надо передать контекст сертификата, который будет использоваться в качестве серверного.
3. На стороне сервера при вызове AcceptSecurityContext выставить флаг ASC_REQ_MUTUAL_AUTH.

Похоже все... Я так понимаю это должно привести к взаимной автоматической проверке сертификатов сторон. Если я заблуждаюсь, пожалуйста, поправьте.
Offline Максим Коллегин  
#4 Оставлено : 21 ноября 2008 г. 16:06:22(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
примерно так.
Знания в базе знаний, поддержка в техподдержке
Offline Dima_Sun  
#5 Оставлено : 21 ноября 2008 г. 18:14:37(UTC)
Dima_Sun

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

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

Сделал как я описывал выше.
У меня уже был рабочий код с проверкой только серверного сертификата (в основе - пример КриптоПро по SSPI). Добавил на стороне клиента использование сертификата при создании мандата, а также флажки SCH_CRED_AUTO_CRED_VALIDATION и ASC_REQ_MUTUAL_AUTH.
В результате во время хендшейка на втором вызове InitializeSecurityContext на клиентской стороне получаю ошибку SEC_E_CERT_UNKNOWN.

А в журнале событий сообщение:
"CryptoPro TLS. Error 0x80090327 validating server's certificate: An unknown error occurred while processing the certificate".

В чем может быть проблема? Куда посмотреть?

Есть подозрение, что при проверке сертификатов происходит попытка обратиться к СА (например для получения списков отзыва), а он не доступен... Может ли это быть причиной?
Offline Максим Коллегин  
#6 Оставлено : 21 ноября 2008 г. 21:12:37(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
На отзыв проверяется, конечно. Но тут какая-то другая проблема построения цепочки.
Попробуй-те CSP 3.6 - там получше диагностика.
Знания в базе знаний, поддержка в техподдержке
Offline Dima_Sun  
#7 Оставлено : 24 ноября 2008 г. 11:48:50(UTC)
Dima_Sun

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

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

У меня 3.6 стоит
Offline Dima_Sun  
#8 Оставлено : 25 ноября 2008 г. 12:01:59(UTC)
Dima_Sun

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

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

Нашел документ под названием "Крипто-Про SSPI". Там в пункте "Работа с пакетами безопасности Windows" --> "Инициализация библиотеки SSPI" написано:
.......
Заполняется структура SCHANNEL_CRED. Поля этой структуры должны быть нулевыми, кроме:


SchannelCred.dwVersion = SCHANNEL_CRED_VERSION;
SchannelCred.dwFlags = SCH_CRED_NO_DEFAULT_CREDS | SCH_CRED_MANUAL_CRED_VALIDATION;
.......

Интересует флаг SCH_CRED_MANUAL_CRED_VALIDATION. Это рекомендация или требование? Пытался заставить работать с флагом SCH_CRED_AUTO_CRED_VALIDATION. Его использование приводит к появлению ошибки "Неизвестная ошибка". Может это связано с тем, что КриптоПро SSPI не поддерживает автоматическую проверку сертификатов? А вообще кто-нибудь делал это? Аууу, откликнитесь.
Offline Максим Коллегин  
#9 Оставлено : 25 ноября 2008 г. 15:06:25(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Насчет SCH_CRED_AUTO_CRED_VALIDATION - не помню, но если не ставить SCH_CRED_MANUAL_CRED_VALIDATION - то сертификаты проверяются.
Для тесат попробуйте проверить серверный сертификат функциями WINAPI.
Знания в базе знаний, поддержка в техподдержке
Offline Dima_Sun  
#10 Оставлено : 25 ноября 2008 г. 15:16:48(UTC)
Dima_Sun

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

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

maxdm написал:

Для тесат попробуйте проверить серверный сертификат функциями WINAPI.

В смысле? Для того чтобы убедиться что серверный сертификат валиден? Вы имеете ввиду функции CertGetCertificateChain и CertVerifyCertificateChainPolicy?
Пробовал - все ок. На клиенте проверяется серверный, на сервере - клиентский. Но я думал, что использование флага SCH_CRED_AUTO_CRED_VALIDATION (ну или отсутствие SCH_CRED_MANUAL_CRED_VALIDATION) приведет к тому, что проверки будут выполнены без моего участия. Грубо говоря я буду избавлен от необходимости иметь функции CheckClientCert и CheckServerCert, и в них уже ручками проверять сертификаты при помощи функций функции CertGetCertificateChain и CertVerifyCertificateChainPolicy. Я именно так понял назначение флага SCH_CRED_AUTO_CRED_VALIDATION. Может я не прав?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
4 Страницы123>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.