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

本文关键字:添加 机器 存储 证书 x509 何使用 编程 方式 | 更新日期: 2023-09-27 18:19:52

我知道问题标题可能是重复的,但我还没有找到适合我的情况的答案,所以开始吧;

我有一个简单的代码

// 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中更改文件夹权限是可行的,虽然这可能有效(未经测试),但对于将成为分布式代码的内容来说,这似乎并不实用。

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

是否有以编程方式将证书添加到本地机器存储中的方法?

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

感谢Oscar和Bob的提问,并引导我朝着正确的方向前进+10:)

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

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

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

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

所以我改变了一切。我的加密类现在在我的windows表单客户端中,并且我已经向客户端添加了自定义清单。这意味着现在整个客户端都以更高的特权打开,但我宁愿这样也不愿意这样。

再次感谢