如何使用c#以编程方式将x509证书添加到本地计算机存储

时间:2013-06-24 15:51:36

标签: c# certificate store x509

我理解问题标题可能是重复的,但我还没有找到答案,所以这里也是如此;

我有这个简单的代码

// Convert the Filename to an X509 Certificate
X509Certificate2 cert = new X509Certificate2(certificateFilePath);

// Get the server certificate store
X509Store store = new X509Store(StoreName.TrustedPeople, StoreLocation.LocalMachine);

store.Open(OpenFlags.MaxAllowed);
store.Add(cert); // x509 certificate created from a user supplied filename

但仍然会出现“拒绝访问”的例外情况。

我已经阅读了一些建议使用StorePermissions可以解决我的问题的信息,但我不认为这与我的代码相关。 话虽如此,我确实对它进行了测试,但我无法让它发挥作用。

我还发现了一些建议,即在Windows中更改文件夹权限是可行的方法,虽然这可能有效(未经测试),但对于将成为分布式代码的内容似乎并不实际。

我还必须补充一点,因为代码将作为服务在服务器上运行,将证书添加到当前用户存储中似乎也是错误的。

无论如何以编程方式将证书添加到本地计算机商店?

1 个答案:

答案 0 :(得分:0)

感谢奥斯卡和鲍勃提出问题并带领我朝着正确的方向+10向你们两人发起:)

我的问题,我认为我们都知道(甚至是我)是运行应用程序的用户没有足够的权限将证书添加到本地机器商店。

但提升用户权限的各种尝试都失败了,让我解释原因。

我的解决方案中有3个单独的项目,wcf服务需要X509certificates,windows表单客户端和加密类库,其中包括安装通过Windows窗体客户端提供的证书。

由于所有3个项目中的大多数代码都可以在没有提升权限的情况下运行,我真的只想在类库中的证书安装阶段提升它们,但我尝试使用ProcessVerb= "runas"在代码中,这不起作用。 然后我尝试添加自定义清单,但如果您尝试更改类库的属性以使用自定义清单,您将发现该选项已禁用。

所以我换了东西。 我的加密类现在在我的Windows窗体客户端中,我已将自定义清单添加到客户端。现在这意味着整个客户都打开了升级的特权,但我宁愿选择这种方式。

再次感谢您