CryptoApi:导出没有私钥的证书?

时间:2012-05-29 21:33:48

标签: c security winapi rsa cryptoapi

我使用CertCreateSelfSignCertificate函数生成了自签名证书。这产生了PCCERT_CONTEXT。

如何仅使用公钥导出存储在PCCERT_CONTEXT变量中的证书?我想这样做,将它发送给网络中的其他各方,这样就可以使用公钥加密消息。

我认为这是一个直接的选择,但它不是。

2 个答案:

答案 0 :(得分:2)

不需要pfx。

证书存在于 CERT_CONTEXT 结构中:只保存成员 pbCertEncoded 指向的缓冲区内容,其长度为成员的值cbCertEncoded

此外,此证书中的公钥直接出现在 CERT_CONTEXT 结构中: pCertInfo-> SubjectPublicKeyInfo 。例如,您可以使用 CryptImportPublicKeyInfo 导入它,然后调用 CryptEncrypt 来加密数据。

通过这两个选项,您可以获得开始加密消息所需的全部内容。当然,私钥必须保持安全,才能解密加密数据。

答案 1 :(得分:1)

看起来您需要先将put证书放入证书存储区,然后使用PFXExportCertStoreEx导出dwFlags为0(即不设置EXPORT_PRIVATE_KEYS)。

P.S。在处理加密库时没有什么是直截了当的,无论是CryptAPI,JSSE,OpenSSL ......它总是一场噩梦。