2

我已经使用该CertCreateSelfSignCertificate函数生成了一个自签名证书。这会产生一个 PCCERT_CONTEXT。

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

我认为这是一个直接的选择,但事实并非如此。

4

2 回答 2

3

不需要 pfx。

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

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

有了这两个选项,您就拥有了开始加密消息所需的一切。当然,必须妥善保管私钥才能解密加密数据。

于 2012-05-31T04:23:47.983 回答
1

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

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

于 2012-05-29T21:42:44.487 回答