我使用CertCreateSelfSignCertificate
函数生成了自签名证书。这产生了PCCERT_CONTEXT。
如何仅使用公钥导出存储在PCCERT_CONTEXT变量中的证书?我想这样做,将它发送给网络中的其他各方,这样就可以使用公钥加密消息。
我认为这是一个直接的选择,但它不是。
答案 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 ......它总是一场噩梦。