36

我已经搜索了半天,寻找一种读取.pfx文件并将证书导入certstore的方法。

到目前为止,我能够读取.pfx文件X509Certifcate并能够在文件中导入一个证书.pfx。到目前为止一切顺利,但是.pfx文件中有三个证书,在加载.pfxwith时X509Certificate,我看不到其他两个证书。

证书是用导出的

*个人信息交换 - PKCS #12 (.PFX)

  • 如果可能,在认证路径中包含所有证书

  • 启用强保护(需要 IE 5.0、NT 4.0 SP4 或更高版本)

这些是导出证书时选择的选项。我知道有三个证书,因为我自己手动进入certstore (MMC)并将其导入个人文件夹。

4

1 回答 1

61

您应该能够通过使用该类来获取包含.pfxX509Certificate2Collection文件中证书的集合对象...这是一些 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用于包含私钥的客户端证书、StoreName.CertificateAuthority中间 CA 证书和StoreName.Root根 CA 证书。

于 2011-02-18T02:09:10.600 回答