ストアにX509Certificate2証明書があり、バイト配列にエクスポートしたいwithprivate key。証明書のバイト配列は、後でバイト配列から証明書をインポートするときに、秘密鍵に秘密鍵が含まれるようにする必要があります。
私は多くの方法を試しましたが、証明書を秘密鍵でエクスポートすることに成功していません。
X509Store store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2 cert = store.Certificates[1];
byte[] certBytes = cert.GetRawCertData(); // Obviously does not work!
秘密鍵を含む証明書をバイト配列に正常にエクスポートできますか?
ヘルプは非常にありがたいです。
X509Certificate2
クラスのExport
関数を使用すると、秘密鍵を含む証明書をバイト配列にエクスポートできます。
次のコードは、秘密鍵を含む証明書のエクスポートを示しています。
X509Store store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2 cert = store.Certificates[1];
// Export the certificate including the private key.
byte[] certBytes = cert.Export(X509ContentType.Pkcs12);
エクスポートした証明書を保護するには、次のExport
関数のオーバーロードを使用します。
byte[] certBytes = cert.Export(X509ContentType.Pkcs12, "SecurePassword");
編集開始
証明書をインポートするには、次のコードを使用します。
X509Certificate2 certToImport = new X509Certificate2(arr, "SecurePassword");
// To mark it as exportable use the following constructor:
X509Certificate2 certToImport = new X509Certificate2(arr, "SecurePassword", X509KeyStorageFlags.Exportable);
// certToImport.HasPrivateKey must be true here!!
X509Store store2 = new X509Store(StoreName.TrustedPublisher,
StoreLocation.CurrentUser);
store2.Open(OpenFlags.MaxAllowed);
store2.Add(certToImport);
store2.Close();
編集終了
秘密キーを取得できない理由の1つは、最初にCAPIに追加されたときに「エクスポート不可」としてマークされていた可能性があります。その場合、私はそれがそれを実現する実際の方法であるとは信じていません。