3

我正在尝试将扩展名为 .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 控制台从另一台服务器上的公钥导出的。

4

1 回答 1

9

我过去在 .p7b 扩展名中遇到过这个问题。我发现有两种方法可以解决这个问题。最后我最终使用了数字 1。数字 2 是您通过导出到 .cer 时已经发现的。您也可以尝试使用选项 3,但我不确定这是否完全有效。

1. 使用SignedCms代替 X509Certificate 类。

有关更多详细信息,请参阅封装的 PKCS #7 签名

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);
于 2014-03-31T05:35:14.613 回答