2012-01-14 1 views
5

previous questionまでフォローアップするには、秘密鍵でX509証明書を取得する必要があるコードがあります。回答に記載されているように、これはX509Storeを使用して行われます。秘密鍵で証明書のベース64エンコード値を取得するにはどうすればよいですか?

これをユニットテストする最良の方法は何ですか?私は、開発中のものとは異なる証明書で開発してテストしたいので、異なる実装を提供するためにCertificateRepositoryインターフェースを作成することができます。

test/devの実装では、証明書のbase64でエンコードされた文字列を使用して、ダミーのパスワードと専用のtest/dev certを使用してcertインスタンスを作成するとよいでしょう。しかし、これまで私は、private64を基にした証明書をbase64文字列としてエンコードする方法を理解することができませんでした。 Base-64としてMMCから証明書をエクスポートしようとするたびに、公開鍵のみがエンコードされます。

+0

どのように証明書を作成しますか? –

+0

これらのスイッチでmakecert.exeを使用して作成されました:-r -pe – danludwig

答えて

9

私はmmcでこれを行う方法を理解することができませんでした。しかし、私はコードでそれを行う方法を見つけ出すんでした:

var store = new X509Store(StoreName.My, StoreLocation.LocalMachine); 
store.Open(OpenFlags.ReadOnly); 
var certificate = store.Certificates.Find(X509FindType.FindByThumbprint, 
    "BLABLABLA", false)[0]; // doesn't matter how you get the cert 
var exported = certificate.Export(X509ContentType.Pfx, "the password"); 
var base64 = Convert.ToBase64String(exported); 
store.Close(); 

限り、あなたはX 509ストアから取得している証明書は、秘密鍵を持っているとして、それはあなたができる、エクスポートされたバイトarrrayになってしまいますbase64文字列に変換します。

0

証明書をストアに追加するときに、秘密キーをエクスポート可能としてマークしてください。あなたが証明書を作成するためにmakecertを使用する場合は

、秘密鍵のエクスポートを行うことが-peオプションを追加します。

+0

これを行いましたが、pkcs12(.pfx)以外のものとしてエクスポートできませんでした。 – danludwig

関連する問題