Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 20.11.2008(UTC) Сообщений: 31 Откуда: Ryazan
  
	 
	
     | 
    
        
            
		      
                Нужна помощь в установлении защищенного соединения с использованием SSPI  и взаимной проверкой сертификатов. Все примеры, которые видел либо не используют сертификатов для аутентификации (MSDN), либо только серверный (КриптоПро, пример использования SSPI для WEB)  К сожалению не удалось найти не только примеров, но даже документаци, чтобы узнать последовательность действий.      
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Администраторы
 Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,417  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 729 раз в 630 постах
  
	 
	
     | 
    
        
            
		      
                флаг 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,417  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 729 раз в 630 постах
  
	 
	
     | 
    
         | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 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,417  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 729 раз в 630 постах
  
	 
	
     | 
    
        
            
		      
                На отзыв проверяется, конечно. Но тут какая-то другая проблема построения цепочки. Попробуй-те 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,417  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 729 раз в 630 постах
  
	 
	
     | 
    
        
            
		      
                Насчет 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