如何使用 c# 从 pfx 文件中检索证书?

Posted

技术标签:

【中文标题】如何使用 c# 从 pfx 文件中检索证书?【英文标题】:How to retrieve certificates from a pfx file with c#? 【发布时间】:2011-02-18 00:55:14 【问题描述】:

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

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

证书是用

导出的

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

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

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

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

【问题讨论】:

【参考方案1】:

您应该能够通过使用 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 用于包含私钥的客户端证书,StoreName.CertificateAuthority 用于中间 CA 证书,StoreName.Root 用于根 CA 证书。

【讨论】:

比尔,太棒了!我在集合中看到了所有三个。我需要将它们中的每一个导入本地计算机的正确存储中。就像您上面提到的那样,StoreName.My、StoreName.Root 和 StoreName CertificateAuthoriy。我可以将它导入三个商店中的任何一个。我的下一个问题是,私钥在 pfx 文件中的作用是什么?我需要对它做些什么吗?我是新手。再次感谢您。 据我所知,一旦带有私钥的个人证书从 .pfx 文件导入到我的商店,私钥应该可以使用了,无需进一步操作。 .例如,使用该证书的客户端证书身份验证应该在 IE 中工作。 在为邮件加密等导入证书时,您可能需要在 CurrentUser 存储中使用它们,但如果您将根 CA 证书导入 CurrentUser,它会弹出一个对话框询问“您确定你想相信这个吗?”。显然,解决这个问题的方法是将根 CA 放在 LocalMachine 存储中。没有弹出窗口,ICA 证书仍然可以使用它。

以上是关于如何使用 c# 从 pfx 文件中检索证书?的主要内容,如果未能解决你的问题,请参考以下文章

从 .pfx 文件中提取证书和私钥文件

如何使用 Java 在 https 连接请求中附加 .pfx 证书?

如何使用openssl从pfx文件中提取私钥? [关闭]

C#创建数字证书并导出为pfx,并使用pfx进行非对称加解密

如何将 .crt 证书文件转换为 .pfx

如何从网络解决方案中间和域证书文件为 Azure 网站创建 PFX 证书导出?