CertCreateSelfSignCertificate
関数を使用して自己署名証明書を生成しました。これにより、PCCERT_CONTEXT が生成されます。
PCCERT_CONTEXT 変数に保存されている証明書を公開鍵だけでエクスポートするにはどうすればよいですか? 私はこれを行い、ネットワーク内の他の関係者に送信して、公開鍵を使用してメッセージを暗号化できるようにしたいと考えています。
これは簡単なオプションだと思いましたが、そうではありません。
pfxは必要ありません。
証明書は構造体CERT_CONTEXT内に存在します。メンバーpbCertEncodedが指し、長さがメンバーcbCertEncodedの値であるバッファーの内容を保存するだけです。
さらに、この証明書の公開鍵は、CERT_CONTEXT構造体に直接存在します:pCertInfo->SubjectPublicKeyInfo。たとえば、CryptImportPublicKeyInfoを使用してインポートし、CryptEncryptを呼び出してデータを暗号化できます。
これらの2つのオプションを使用すると、メッセージの暗号化を開始するために必要なものがすべて揃っています。もちろん、暗号化されたデータを復号化できるようにするには、秘密鍵を安全に保管する必要があります。
最初に証明書を証明書ストアに入れ、次にPFXExportCertStoreExを使用して0 の dwFlags を渡す (つまり、EXPORT_PRIVATE_KEYS を設定しない) 必要があるようです。
PS CryptAPI、JSSE、OpenSSL など、暗号化ライブラリを扱う場合、決して簡単なことではありません... それは常に悪夢です。