PFXImportCertStore - выпуск - cryptoapi - PullRequest
0 голосов
/ 11 июня 2011

Я импортировал сертификат PFX, выданный сторонним центром сертификации, используя PFXImportCertStore.После успешного импорта для PCERT_KEY_PROV_INFO_PROP_ID устанавливаются следующие значения по по умолчанию с помощью того же вызова, PFXImportCertStore

enter image description here

  1. Почему dwKeySpec распознается как AT_KEYEXCHANGE тип ключа, а не AT_SIGNATURE?

  2. Почему для pwszProvName установлен Microsoft Base Cryptographic Provider v1.0?

  3. Сертификат в первую очередь был выдан ТОЛЬКО для цифровой подписи.Но поле использования ключа указывает, что сертификат может быть использован для цифровой подписи, отказа в репутации, шифрования ключей, шифрования данных (f0).Расширенное использование ключа указывает, Аутентификация клиента и Безопасная электронная почта?Правильно ли выдан ЦС сертификат?На лицевой стороне сертификата отображается следующее сообщение (снимок экрана ниже), что заставляет меня подозревать, что этот сертификат не был выдан для цифрового пения?Правильно ли я думаю или нет?

enter image description here

4. Из-за этих проблем я не могу подписать данные с помощью CryptSignMessage.Внутренний вызов не может получить контекст для закрытого ключа для подписи.Любые предложения о том, как я могу обойти эту проблему?Я могу подписать подписанный сертификат PFX, который я сгенерировал.Как вы думаете, я мог бы экспортировать закрытый ключ в новый контейнер и установить для него свойство AT_SIGNATURE, а тип поставщика csp - PROV_RSA_AES, так как мне требуется SHA256.

Я работаю с XP sp3.

Спасибо

1 Ответ

3 голосов
/ 12 июня 2011

Ответ 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.

...