删除证书存储





1.00/5 (1投票)
此 deletecertstore 工具删除证书存储,作为 makecert 的补充。
引言
本文提供了一个用于删除证书存储的工具。该工具 makecert 用于创建证书。如果存储不存在,它也会创建一个证书存储。可以通过 证书管理单元 删除证书,但没有办法删除证书存储。本文提供了一个命令行工具 deletecertstore,用于删除证书存储。该工具是 Daniel Chambers 在其文章 Removing a Windows System Certificate Store 中发布的代码的扩展。
背景
要查看证书,可以使用 证书管理单元。
mmc
File / Add/Remove Snap-in...
Certificates Add
Computer account
Local computer
Finish
OK
证书管理单元
工具 makecert
通常位于文件夹 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64 中。以下命令在 LocalMachine
位置的 Store1
存储中为发布者名称 Test1
创建一个证书
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64\makecert"
-ss Store1 -sr LocalMachine -n CN=Test1
刷新 证书(本地计算机) 节点,将显示新的存储 Store1 和证书 Test1
通过右键单击证书 Test1
,可以删除它,但即使存储 Store1
为空,也无法删除该存储。使用提供的工具,可以删除存储 Store1
。
Using the Code
该项目是一个控制台应用程序。要指定证书的存储和位置,使用了与 makecert
相同的参数 -ss
和 -sr
。
if (args.Length == 4)
{
var store = "";
var location = "";
for (var i = 0; i < 4; i += 2)
{
if (args[i] == "-ss")
store = args[i + 1];
else if (args[i] == "-sr")
{
location = args[i + 1];
if (!",localmachine,currentuser,".Contains("," + location.ToLower() + ","))
throw new Exception
("Parameter sr takes argument LocalMachine or CurrentUser");
}
else
throw new Exception(string.Format("Parameter {0} is not allowed", args[i]));
}
...
}
else
throw new Exception("usage: DeleteCertStore -ss <store>
-sr <localmachine currentuser="" or="">");
}
Windows SDK 函数 CertUnregisterSystemStore 用于删除指定的存储。
...
var ok = CertUnregisterSystemStore
(store, CERT_STORE_DELETE_FLAG | CERT_SYSTEM_STORE_LOCATION);
...
[DllImport("crypt32.dll", CharSet = CharSet.Unicode)]
public static extern bool CertUnregisterSystemStore(string systemStore, uint flags);
演练
- 将项目解压缩到,例如,c:\temp。
- 使用 Visual Studio 2010 或更高版本打开并构建项目,c:\temp\DeleteCertStore\DeleteCertStore.vbproj。将创建可执行文件,c:\temp\DeleteCertStore\bin\Debug\deletecertstore.exe。
- 按照 背景 部分中的步骤创建证书
Test1
在Store1
中。 - 使用证书管理单元验证是否已创建证书
Test1
在Store1
中。 - 例如使用
Start/Run/cmd
打开命令提示符。 c:\temp\DeleteCertStore\bin\Debug\deletecertstore -ss Store1 -sr localmachine
将删除存储Store1
。- 刷新证书管理单元,并验证是否未显示
Store1
。
历史
- 删除使用参数
-ss
和-sr
指定的证书存储