Статус: Активный участник
Группы: Участники
Зарегистрирован: 20.11.2008(UTC) Сообщений: 31 Откуда: Ryazan
|
Нужна помощь в установлении защищенного соединения с использованием SSPI и взаимной проверкой сертификатов. Все примеры, которые видел либо не используют сертификатов для аутентификации (MSDN), либо только серверный (КриптоПро, пример использования SSPI для WEB) К сожалению не удалось найти не только примеров, но даже документаци, чтобы узнать последовательность действий.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,377 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 32 раз Поблагодарили: 706 раз в 614 постах
|
флаг MANUAL_CRED_VALIDATION говорит SSPI, что не нужно проверять сертификаты - иначе проверяет. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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.
Похоже все... Я так понимаю это должно привести к взаимной автоматической проверке сертификатов сторон. Если я заблуждаюсь, пожалуйста, поправьте.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,377 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 32 раз Поблагодарили: 706 раз в 614 постах
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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".
В чем может быть проблема? Куда посмотреть?
Есть подозрение, что при проверке сертификатов происходит попытка обратиться к СА (например для получения списков отзыва), а он не доступен... Может ли это быть причиной?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,377 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 32 раз Поблагодарили: 706 раз в 614 постах
|
На отзыв проверяется, конечно. Но тут какая-то другая проблема построения цепочки. Попробуй-те CSP 3.6 - там получше диагностика. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 20.11.2008(UTC) Сообщений: 31 Откуда: Ryazan
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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 не поддерживает автоматическую проверку сертификатов? А вообще кто-нибудь делал это? Аууу, откликнитесь.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,377 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 32 раз Поблагодарили: 706 раз в 614 постах
|
Насчет SCH_CRED_AUTO_CRED_VALIDATION - не помню, но если не ставить SCH_CRED_MANUAL_CRED_VALIDATION - то сертификаты проверяются. Для тесат попробуйте проверить серверный сертификат функциями WINAPI. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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. Может я не прав?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close