Ответ 1: ключ автоматически классифицируется как AT_KEYEXCHANGE
, потому что он также используется для шифрования сеансового ключа и т. Д. Т.е., хотя основная цель моего приложения заключается в цифровой подписи данных, центр сертификации определил политику использования ключа для включения шифра , что заставляет CryptoAPI отображать тип ключа на AT_KEYEXCHANGE
.
Ответ 2: Я ПРИНИМАЮ , что это csp по умолчанию на этой машине, так что ...? Любое лучшее объяснение, пожалуйста
Ответ 3: Из многих ответов парней из группы Crypto Google ключ AT_KEYEXCHANGE
также можно использовать для подписи данных при условии, что использование ключа сертификата позволяет выполнять цифровую подпись. Представляется, что сторонние центры сертификации выпускают сертификаты, которые можно использовать для различных целей. Таким образом, сторонний CA правильно выдал сертификат.
Ответ 4: Мне удалось подписать данные, используя CryptSignMessage
с тем же сертификатом, выданным третьей стороной. Я изменил dwProvType
в PCERT_KEY_PROV_INFO_PROP_ID
на PROV_RSA_AES
и передал NULL для pwsProvName
. Это изменение выполняется сначала с помощью CertGetCertificateContextProperty
, чтобы получить свойства, а затем с помощью CertSetCertificateContextProperty
, чтобы установить свойства по вашему выбору. Это исправило проблему подписи. Теперь я могу подписать ключ SHA256 / RSA1024, AT_EXCHANGE
.