有没有办法从 windows certstore 获取 EVP_KEY 结构中的私钥?
Is there any way to get private key in EVP_KEY structure from windows certstore?
我尝试使用 windows API(PFXExportCertStoreEx) 从 certstore 获取私钥。
此 API 能够从对应的 CERT_INDEX 的 certstore 中导出 CRYPT_DATA_BLOB。但是我需要 EVP_KEY 结构中的私钥,因为我的应用程序正在为 SSL_CTX 使用 openssl API。所以导出的结构CRYPT_DATA_BLOB不适合SSL上下文中的EVP_PKEY(SSL_CTX)。
如有任何帮助,我们将不胜感激。
我是这个 windows 证书库的新手。如果您需要更多信息,请告诉我。
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);
}
}
}
我尝试使用 windows API(PFXExportCertStoreEx) 从 certstore 获取私钥。
此 API 能够从对应的 CERT_INDEX 的 certstore 中导出 CRYPT_DATA_BLOB。但是我需要 EVP_KEY 结构中的私钥,因为我的应用程序正在为 SSL_CTX 使用 openssl API。所以导出的结构CRYPT_DATA_BLOB不适合SSL上下文中的EVP_PKEY(SSL_CTX)。
如有任何帮助,我们将不胜感激。
我是这个 windows 证书库的新手。如果您需要更多信息,请告诉我。
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);
}
}
}