在Windows操作系统中,证书存储是用于存放数字证书的容器。通常,这些存储用于加密和身份验证。然而,在某些情况下,可能需要删除一个证书存储,尤其是当它不再需要或者包含错误信息时。本文将介绍如何使用命令行工具删除一个证书存储。
要查看和管理证书,可以使用“证书”管理单元。这个工具可以通过Microsoft Management Console (MMC) 访问。以下是如何添加“证书”管理单元到MMC的步骤:
现在,可以看到“证书”管理单元,并且可以查看和管理计算机上的证书。
使用makecert工具,可以创建一个新的证书。makecert通常位于以下路径:
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64
。以下是创建一个名为“Test1”的证书并将其存放在名为“Store1”的存储中的命令:
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64\makecert" -ss Store1 -sr LocalMachine -n CN=Test1
。执行此命令后,可以在“证书(本地计算机)”节点下看到新的存储“Store1”和证书“Test1”。
虽然可以通过“证书”管理单元删除单个证书,但无法直接删除存储。即使存储为空,也无法删除。为了解决这个问题,可以使用一个名为deletecertstore的命令行工具来删除存储。
这个工具是一个控制台应用程序。可以使用与makecert相同的参数-ss
和-sr
来指定存储和证书的位置。以下是C#代码示例:
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 -sr ");
为了删除指定的存储,代码中使用了Windows SDK函数CertUnregisterSystemStore
。
var ok = CertUnregisterSystemStore(store, CERT_STORE_DELETE_FLAG | CERT_SYSTEM_STORE_LOCATION);