如何使用 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 文件中检索证书?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Java 在 https 连接请求中附加 .pfx 证书?