Schannel api и промежуточные сертификаты
От: Arier  
Дата: 11.11.14 10:24
Оценка:
Добрый день,

Использую Schannel api для реализации TLS в клиент-серверном приложении. Есть сервер, который генерирует Root Authority сертификат, этим сертификатом подписывает промежуточные сертификаты, которые передаются клиенткам, те в свою очередь могут подписывать сертификаты для других клиентов и эти сертификаты использовать во время авторизации по TLS. В общем возможна ситуация, когда к серверу постучится клиент с цепочкой:

Root Authority <- промежуточный сертификат <- клиентский сертификат

На стороне клиента все сертификаты есть, они хранятся в отдельном Certificate store в памяти. Соответсвенно клиентский сертификат ставится в SHANNEL_CRED структуру при инициализации контекста. Потом во время TLS хэндшейка этот сертификат благополучно доходит до сервера и извлекается через QueryContextAttributes.
MSDN говорит, что если цепочка сертификатов больше 2, то промежуточные сертификаты тоже передадутся на сервер и будут лежать в отдельном certificate store, хэндл на который будет после вызова QueryContextAttributes с параметром SECPKG_ATTR_REMOTE_CERT_CONTEXT лежать в поле hCertStore сертификата. Но у меня получается, что в этом сторе только один сертификат, то есть промежуточные сертификаты не доходят и авторизация фейлится, поскольку сервер не может проверить цепочку сертификатов. Соотвественно вопрос как передать эти сертификаты на сервер?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.