Преобразование закрытого ключа в хранилище Windows в PEM (для OpenSSL)

Я хочу получить закрытый ключ из магазина Windows и преобразовать его в PEM, чтобы использовать его в OpenSSL.
Я искал способ сделать это в течение нескольких часов!

  • Я использую CertFindCertificateInStore (), чтобы получить CERT_CONTEXT (который, как я знаю, содержит закрытый ключ с использованием параметра поиска).
  • Затем я использовал CryptAcquireCertificatePrivateKey (), чтобы получить HCRYPTPROV (только из-за имени функции).
  • Теперь я использую CryptGetUserKey (), чтобы получить HCRYPTKEY (только потому, что он звучит правильно …?!)

Но теперь я снова застрял.

Я думаю, что это безопасность от неясности, сделанная Microsoft, чтобы убедиться, что мы никогда не сможем получить закрытые ключи.

1

Решение

Первые два в порядке. Но вам нужно использовать CryptExportPKCS8. Он экспортирует закрытый ключ в буфер в формате PKCS # 8 DER. Из PKCS # 8 вы можете получить его в структуру Open50L X509 (используя функции d2i и буфер памяти в качестве входных данных в структурах BIO).

Однако если закрытый ключ помечен как неэкспортируемый, эта функция завершится ошибкой.

Единственное, что вы можете сделать, это подписать данные с помощью такого закрытого ключа.

0

Другие решения

Я оставляю ответ таким, какой он есть (ведь без dbasic я бы застрял :-)), но я должен добавить еще:

Окончание поддержки CryptExportPKCS8 () закончилось XP / 2003, поэтому мы должны использовать PFXExportCertStoreEx (), однако эта функция экспортирует хранилище WHOLE. Таким образом, чтобы экспортировать только один сертификат, вам нужно использовать хранилище памяти.

Посмотрите этот пример о том, как это сделать:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa382037(v=vs.85).aspx

Вставьте нужный сертификат в хранилище памяти, а затем используйте PFXExportCertStoreEx () для экспорта того, что вам нужно.

2

По вопросам рекламы [email protected]