2016-12-01 4 views
1

Windows API(PFXExportCertStoreEx)を使用してcertstoreから秘密鍵を取得しようとしました。Windows certstoreからEVP_KEY構造体に秘密鍵を取得する方法はありますか?

このAPIは、対応するCERT_INDEXのcertstoreからCRYPT_DATA_BLOBをエクスポートできます。しかし私のアプリケーションはSSL_CTX用のopenssl APIを使用しているので、私はEVP_KEY構造体のプライベートキーが必要です。したがって、エクスポートされた構造CRYPT_DATA_BLOBitはSSLコンテキスト(SSL_CTX)のEVP_PKEYに適合しません。

ご協力いただければ幸いです。

私はこの窓certstoreを初めて使っています。それ以上の情報が必要なら私に知らせてください。

+0

こんにちは!あなたはそれを持っていますか?私は同じことが欲しい!もしそうなら、私たちと共有してください! –

答えて

0
CRYPT_DATA_BLOB dataBlob = {0}; 
if(PFXExportCertStoreEx(hStore, &dataBlob, password, NULL, 
      EXPORT_PRIVATE_KEYS | REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY | REPORT_NO_PRIVATE_KEY)) 
{ 
    if (dataBlob.cbData > 0) 
    { 
     dataBlob.pbData = (BYTE*)malloc(dataBlob.cbData); 
     if (PFXExportCertStoreEx(hSystemStore, &dataBlob, password.toStdWString().c_str(), NULL, 
        EXPORT_PRIVATE_KEYS | REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY | REPORT_NO_PRIVATE_KEY)) 
     { 
      EVP_PKEY *pkey; 
      X509 *cert; 
      STACK_OF(X509) *ca = NULL; 
      PKCS12 *p12; 
      int i; 
      CRYPTO_malloc_init(); 
      OpenSSL_add_all_algorithms(); 
      SSLeay_add_all_algorithms(); 
      ERR_load_crypto_strings(); 

      BIO* input = BIO_new_mem_buf((void*)dataBlob.pbData, dataBlob.cbData); 
      p12 = d2i_PKCS12_bio(input, NULL); 

      PKCS12_parse(p12, password.toStdString().c_str(), &pkey, &cert, &ca); 
     } 
    } 
} 
+0

上記のコードで役に立つかもしれません。それは私のために働いたが、OpenSSL API @Carlosを使う必要がある。 –

関連する問題