如何干净地从存储中删除证书

17

您可以使用certmgr.msc中的向导将证书安装到证书存储中(右键安装)?有没有人知道如何通过向导/代码(首选)/脚本“干净地”删除所有证书?

我希望能够从LocalMachine和/或CurrentUser存储中删除我之前安装的所有内容,而不留下任何残留物。

谢谢。

3个回答

19
您可以尝试使用 .Net Framework 中的 X509Store 和相关类来从证书存储中删除证书。以下代码示例从当前用户的“我的”存储中删除证书:
// Use other store locations if your certificate is not in the current user store.
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadWrite | OpenFlags.IncludeArchived);

// You could also use a more specific find type such as X509FindType.FindByThumbprint
X509Certificate2Collection col = store.Certificates.Find(X509FindType.FindBySubjectName, "yoursubjectname", false);

foreach (var cert in col)
{
  Console.Out.WriteLine(cert.SubjectName.Name);

  // Remove the certificate
  store.Remove(cert);        
}
store.Close();

编辑开始: 根据评论区的意见,我更新了我的答案,并提供了代码示例,展示如何移除证书及其所有链中的证书:

  X509Certificate2Collection col = store.Certificates.Find(X509FindType.FindBySubjectName, "yoursubjectname", false);

  X509Chain ch = new X509Chain();
  ch.Build(col[0]);
  X509Certificate2Collection allCertsInChain = new X509Certificate2Collection();

  foreach (X509ChainElement el in ch.ChainElements)
  {
    allCertsInChain.Add(el.Certificate);
  }

  store.RemoveRange(allCertsInChain);

编辑完毕

希望这有所帮助。


2
它会确保从机器中删除所有证书,包括链中的证书吗? - daehaai
好的,这里有一个额外的问题。当您使用向导安装时,它会有一个选项“根据类型自动存储证书”。在代码中,如何将证书安装到相应的存储中? - daehaai
1
@activebiz:不,Remove()函数不会删除证书链中的证书。我已经更新了我的答案,并提供了一个示例来展示如何删除证书链中的证书。 - Hans
我找到了这个问题的答案:X509Store store = new X509Store(StoreLocation.LocalMachine); - daehaai

5

虽然这篇文章比较旧,但我刚刚按照下面链接的帖子在Windows 7上尝试,并且成功了...使用管理控制台。

  1. 开始 -> 运行 -> mmc.exe
  2. 点击文件 -> "添加/删除插件"
  3. 选择证书,然后点击添加
  4. 选择"计算机帐户",然后点击下一步
  5. 选择“本地计算机”,然后点击完成
  6. 点击确定,这样应该会带您回到MMC
  7. 在左侧窗格中展开证书(本地计算机)
  8. 对列出的证书进行操作...

来源: http://windowssecrets.com/top-story/certificate-cleanup-for-most-personal-computers/


2
虽然这个链接可能回答了问题,但最好在这里包含回答的基本部分并提供参考链接。仅有链接的答案如果链接页面更改可能会失效。 - nobody

2
您可以尝试使用certmgr.exe。以下命令从本地用户个人\证书存储中删除一个cn为'commoncertname'的证书。
.\certmgr.exe -del -n commoncertname -c -s -r currentuser my

你可以在这里找到有关certmgr.exe的更多信息:http://msdn.microsoft.com/en-us/library/windows/desktop/aa376553%28v=vs.85%29.aspx 更新:
天啊!我简直不敢相信我没有尝试过这个!你可以使用以下方法删除证书:
Get-ChildItem Cert:\CurrentUser\My | Where-Object {$_.Subject -eq 'CN=certCN'} | Remove-Item

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接