31

ストアに X509Certificate2 証明書があり、秘密鍵を使用してバイト配列にエクスポートしたいと考えています。証明書のバイト配列は、後でバイト配列から証明書をインポートするときに、秘密鍵に秘密鍵が含まれるようにする必要があります。

私は多くの方法を試しましたが、秘密鍵を使用して証明書をエクスポートすることに成功しませんでした。

X509Store store = new X509Store(StoreLocation.CurrentUser);      

store.Open(OpenFlags.ReadOnly);

X509Certificate2 cert = store.Certificates[1];

byte[] certBytes = cert.GetRawCertData(); // Obviously does not work!

秘密鍵を含む証明書をバイト配列に正常にエクスポートできますか?

助けていただければ幸いです。

4

2 に答える 2

35

このクラスのExport関数をX509Certificate2使用すると、秘密鍵を含む証明書をバイト配列にエクスポートできます。

次のコードは、秘密鍵を使用して証明書をエクスポートする方法を示しています。

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();

編集終了

于 2012-03-21T19:22:41.907 に答える
4

秘密鍵を取得しない理由の1つは、最初にCAPIに追加されたときに「エクスポート不可」とマークされていたためである可能性があります。その場合、それが実際の方法ではないと思います。

于 2012-03-22T10:05:25.257 に答える