【问题标题】:How to programmatically add x509 certificate to local machine store using c#如何使用 c# 以编程方式将 x509 证书添加到本地机器存储
【发布时间】:2013-06-21 05:01:13
【问题描述】:

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

我有这个简单的代码

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

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

无论如何以编程方式将证书添加到本地机器存储中?

【问题讨论】:

  • 这段代码是运行提升了,还是 UAC 妨碍了?
  • 在管理员账户下运行代码。
  • @Oscar 我无法完全控制服务器,但我使用的用户帐户位于管理员组中。
  • @Bob 你能详细说明一下吗?
  • 好的,你是管理员。您是否尝试过类似的问题? stackoverflow.com/questions/566570/…

标签: c# certificate store x509


【解决方案1】:

感谢 Oscar 和 Bob 提出问题并带领我朝着正确的方向前进 +10 对你们俩 :)

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

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

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

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

所以我改变了一些事情。 我的密码学课程现在在我的 Windows 窗体客户端中,并且我已将自定义清单添加到客户端。现在这意味着整个客户端都以提升的权限打开,但我更愿意这样做。

再次感谢您

【讨论】:

    猜你喜欢
    • 2010-10-08
    • 1970-01-01
    • 2010-09-20
    • 2014-11-22
    • 1970-01-01
    • 2011-04-15
    • 2015-08-22
    • 2013-05-11
    相关资源
    最近更新 更多