web-dev-qa-db-ja.com

C#でPFXファイルから証明書を取得する方法

私は.pfxファイルを読み取り、証明書をcertstoreにインポートする方法を探して半日ぐるぐる探していました。

これまでのところ、.pfxX509Certifcateファイルを読み取ることができ、.pfxファイル内の1つの証明書をインポートできます。これまでのところ良好ですが、.pfxファイルに3つの証明書があり、.pfxX509Certificateとともにロードすると、他の2つの証明書が表示されません。

証明書は

*個人情報交換-PKCS#12(.PFX)

  • 可能であれば、証明書パスにすべての証明書を含めます

  • 強力な保護を有効にする(IE 5.0、NT 4.0 SP4以上が必要)

これらは、証明書をエクスポートするときに選択したオプションです。手動でcertstore(MMC)に移動し、個人用フォルダーに自分でインポートしているため、3つの証明書があることはわかっています。

32
Chloé

X509Certificate2Collectionクラスを使用して、証明書を含むコレクションオブジェクトを。pfxファイルで取得できるはずです...ここにC#がありますコード例:

string certPath = <YOUR PFX FILE PATH>;
string certPass = <YOUR PASSWORD>;

// Create a collection object and populate it using the PFX file
X509Certificate2Collection collection = new X509Certificate2Collection();
collection.Import(certPath, certPass, X509KeyStorageFlags.PersistKeySet);

次に、コレクションを反復処理できます。

foreach (X509Certificate2 cert in collection)
{
    Console.WriteLine("Subject is: '{0}'", cert.Subject);
    Console.WriteLine("Issuer is:  '{0}'", cert.Issuer);

    // Import the certificates into X509Store objects
}

証明書のタイプ(クライアント証明書、中間CA証明書、ルートCA)に応じて、適切な証明書ストアを(X509Storeオブジェクトとして)開いてインポートする必要があります。

X509Storeのドキュメントをご覧ください。

http://msdn.Microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509store.aspx

StoreName列挙のさまざまなメンバー:

http://msdn.Microsoft.com/en-us/library/system.security.cryptography.x509certificates.storename.aspx

私が理解していることから、秘密鍵を含むクライアント証明書にはStoreName.My、中間CA証明書にはStoreName.CertificateAuthority、ルートCA証明書にはStoreName.Rootを使用する必要があります。

44
Bill Agee