C#,无法将 .p7b 证书导入 Windows 商店
Posted
技术标签:
【中文标题】C#,无法将 .p7b 证书导入 Windows 商店【英文标题】:C#, Unable to import .p7b certificate to windows store 【发布时间】:2014-05-10 07:51:33 【问题描述】:我正在尝试将扩展名为 .p7b 的证书 (smime) 导入 Windows 商店。
这是当前代码
X509Certificate2 cert = new X509Certificate2(@"C:\test_public_cert.p7b");
X509Store store = new X509Store(StoreName.AddressBook, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite);
store.Add(cert);
它给了我一个“找不到原始签名者”的错误。
备注:此代码适用于 .cer 扩展名(DER 和 Base 64)。
有人请帮忙找出可能的根子句吗?
谢谢。
PS。 VS2010、Windows Server 2008 R2
Edit1:test_public_cert.p7b 是通过 mmc 控制台从另一台服务器上的公钥导出的。
【问题讨论】:
【参考方案1】:我过去在使用 .p7b 扩展名时遇到过这个问题。我发现有两种方法可以解决这个问题。最后我最终使用了数字 1。数字 2 是您通过导出到 .cer 已经发现的。您也可以尝试使用选项 3,但我不确定这是否完全有效。
1。 使用 SignedCms 代替 X509Certificate 类。
更多详情请查看Enveloped PKCS #7 Signatures
2。 加载 .p7b 仅包括证书文件,可能不包括私钥。在生成它的服务器上安装私钥,然后将其导出为 .pfx 文件并将其移动到您要使用的服务器。
3。 由于 .p7b 文件包含整个证书链而不仅仅是一个证书,您可以尝试以下方法将其添加到 windows 商店。
X509Certificate2Collection certCollection = new X509Certificate2Collection();
certCollection.Import(@"C:\test_public_cert.p7b");
X509Store store = new X509Store(StoreName.AddressBook, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite);
store.AddRange(certCollection);
【讨论】:
谢谢回复。我知道如何使用类 SignedCms 来编码或解码消息,但我还不知道如何利用它来导入证书到存储。 A .p7b 包含证书链而不是单个证书。您可以使用 SignedCms 解码 .p7b,提取正确的原始字节并使用它来创建 X509Certificate2 并尝试存储它。我还用第三个选项编辑了原始答案。 感谢第三个选项,我可以得到一些进一步工作的想法。顺便说一句,我也会尝试 SignedCms 课程。 对于找到此线程并希望使用 PowerShell 的任何人,您的解决方案在 PowerShell 中如下所示。 $certcoll = 新对象 System.Security.Cryptography.X509Certificates.X509Certificate2Collectio $certcoll.Import($FilePath) $x509Store = 新对象 System.Security.Cryptography.X509Certificates.X509Store $StoreName,$Location $x509Store.Open([System .Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite) $x509Store.AddRange($certcoll) $x509Store.Close()以上是关于C#,无法将 .p7b 证书导入 Windows 商店的主要内容,如果未能解决你的问题,请参考以下文章