Закрытые ключи CryptoAPI 2.0
Учетные данные Schannel представляются внутри как CERT_CONTEXT структуры. Schannel находит закрытый ключ , связанный с определенным контекстом сертификата, с помощью свойства CERT_KEY_PROV_INFO_PROP_ID сертификата. Используя это свойство, Schannel обращается к закрытому ключу , вызывая функцию CryptAcquireContext . Дополнительные сведения см. в разделе Пары открытого и закрытого ключей.
Каждое удостоверение Schannel содержит ссылку на один или несколько закрытых ключей, каждый из которых связан с определенным сертификатом. Закрытые ключи обрабатываются совершенно по-разному в зависимости от того, являются ли учетные данные для клиента или сервера.
Закрытые ключи клиента
Закрытыми ключами клиента управляет используемый поставщик служб шифрования (CSP). Закрытые ключи клиента обычно хранятся в CSP типа PROV_RSA_FULL или PROV_RSA_SIGNATURE.
Если клиентское приложение выполняет вызов CryptAcquireContext вручную, то перед вызовом AcquireCredentialsHandle клиент должен привязать дескриптор CSP к контексту сертификата с помощью свойства CERT_KEY_PROV_HANDLE_PROP_ID. Если Schannel находит этот набор свойств, он не использует свойство CERT_KEY_PROV_INFO_PROP_ID.
Закрытые ключи сервера
Закрытые ключи сервера хранятся одним из следующих поставщиков служб конфигурации:
- PROV_RSA_SCHANNEL
- PROV_DH_SCHANNEL
- PROV_FORTEZZA CSP
Выбор поставщика служб конфигурации зависит от выбранного алгоритма обмена ключами. Закрытые ключи сервера должны быть типа AT_KEYEXCHANGE.