在gSoap中使用私钥与Windows证书存储区

问题描述 投票:0回答:1

我正在使用OpenSSL编写一个使用Windows证书的gSoap客户端。我有一个PEM证书和一个PEM私钥。当我将它们组合成一个文件并将其提供给gSoap时,它可以正常工作:

soap_ssl_client_context( &soap,
                         SOAP_SSL_DEFAULT,
                         "certkey.pem", /* required only when client must authenticate to server         */
                         NULL, /* password to read the key file (not used with GNUTLS)                 */
                         NULL, /* cacert file to store trusted certificates                            */
                         NULL, /* capath to directory with trusted certificates                        */
                         NULL  /* if randfile!=NULL: use a file with random data to seed randomness    */
                                 )

但是,当我将证书安装到Windows存储中并通过X509_STORE_add_cert从那里加载它时,它不起作用。我的猜测是我必须以某种方式使用私钥,但我不知道以什么方式。我该怎么办?

openssl certificate gsoap
1个回答
1
投票

你是正确的,你需要加载私钥,X509_STORE_add_cert是不正确的。如果要为服务器或客户端使用证书,则需要使用SSL_CTX_use_xxx或SSL_use_xxx将证书设置为ssl上下文,以获取证书和证书的私钥。

EG

SSL_CTX_use_certificate_chain_file(ctx, "cert.pem");
SSL_CTX_use_PrivateKey_file(ctx, "cert.pem", SSL_FILETYPE_PEM);

以上假设“cert.pem”同时包含证书链和私钥。

更新:

我假设“Windows Storage”是指“Windows证书存储”。在Windows证书存储区中使用证书的主要问题是使用私钥。如果私钥被标记为“不可导出”,那么您只能使用Windows Crypto API“使用”私钥。因此,如果您希望使用存储在Windows证书存储区中的私钥的证书,则需要将证书(足够简单)和私钥“导出”到openssl x509和rsa对象中以用于SSL_CTX_xxx函数。我发现导出私钥的最好方法是使用qzxswpoi使用BCRYPT_RSAFULLPRIVATE_BLOB blob类型,然后使用NCryptExportKey函数手动将BCRYPT_RSAKEY_BLOB分解为openssl RSA结构。

RSA_setxxx
© www.soinside.com 2019 - 2024. All rights reserved.