65.9K
CodeProject 正在变化。 阅读更多。
Home

删除证书存储

starIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

1.00/5 (1投票)

2019年5月24日

CPOL

2分钟阅读

viewsIcon

7969

downloadIcon

138

此 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);

演练

  1. 将项目解压缩到,例如,c:\temp
  2. 使用 Visual Studio 2010 或更高版本打开并构建项目,c:\temp\DeleteCertStore\DeleteCertStore.vbproj。将创建可执行文件,c:\temp\DeleteCertStore\bin\Debug\deletecertstore.exe
  3. 按照 背景 部分中的步骤创建证书 Test1Store1 中。
  4. 使用证书管理单元验证是否已创建证书 Test1Store1 中。
  5. 例如使用 Start/Run/cmd 打开命令提示符。
  6. c:\temp\DeleteCertStore\bin\Debug\deletecertstore -ss Store1 -sr localmachine 将删除存储 Store1
  7. 刷新证书管理单元,并验证是否未显示 Store1

历史

  1. 删除使用参数 -ss-sr 指定的证书存储
© . All rights reserved.