Windows 2012 R2 服务器 - 如何安全地从 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys 中删除文件

Windows 2012 R2 服务器 - 如何安全地从 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys 中删除文件

在装有 IIS 的 Windows 2012 R2 服务器上,我们有一个 Web 应用程序,该应用程序在 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys 中生成证书并保存密钥。我们已修复此问题,但现在文件夹中有超过 6,000,000 个文件。

我尝试重命名该文件夹并创建一个空的 MachineKeys 文件夹,但这破坏了操作系统处理 SSL 连接的能力。

我可以使用此脚本找到哪些 LocalMachine 存储库证书对应于哪些文件名:

Foreach ($MachineCert In Get-ChildItem Cert:\LocalMachine -Recurse | Where HasPrivateKey)
{
    $array += $MachineCert | 
       Select @{n='Subject';   e={ $MachineCert.Subject }},
              @{n='Container'; e={ $MachineCert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName }},
              @{n='Store';     e={ $MachineCert.PSParentPath }}
}

但是,我不知道如何处理这些信息。有数以百万计的文件,除了上面的脚本报告的文件之外,我是否应该安全地启用所有文件?

答案1

我能够解决这个问题。首先,我使用这个脚本编译了一份需要保留的证书列表:

$array = @()

Foreach ($MachineCert In Get-ChildItem Cert:\LocalMachine -Recurse | Where HasPrivateKey)
{
    $array += $MachineCert | 
       Select @{n='Subject';   e={ $MachineCert.Subject }},
              @{n='Container'; e={ $MachineCert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName }},
              @{n='Store';     e={ $MachineCert.PSParentPath }}
}

$array | Export-CSV c:\temp\out.csv

然后,我从输出文件中获取所有容器名称并将它们输入到另一个脚本中,该脚本将 MachineKeys 文件夹中具有匹配文件名的文件复制到单独的文件夹:

$arr = @(
    "f686aace6942fb7f7ceb231212eef4a4_4cd8c04c-5245-4f49-962b-9e4388716e1f",
    "d1acbca52745e8cdc7796dc9283bb8fc_4cd8c04c-5245-4f49-962b-9e4388716e1f",
    "83ceb9ab426f3fa7efdf06154db8cd13_4cd8c04c-5245-4f49-962b-9e4388716e1f",
    "98d0bf53be581119e8ac290607289a64_4cd8c04c-5245-4f49-962b-9e4388716e1f",
    "e955cd99d4ab953714119f933c483fd5_4cd8c04c-5245-4f49-962b-9e4388716e1f",
    "1b1f4753df9704baf9d16743d0c9b3d1_4cd8c04c-5245-4f49-962b-9e4388716e1f",
    "a31b3a063eb59a2fe7801565c6aa3846_4cd8c04c-5245-4f49-962b-9e4388716e1f"
)


gci -File -Recurse -Include $arr | % { copy-item $_.FullName "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys_new" }

该脚本运行了几乎一整天,因为它必须处理数百万个文件。完成后,我将现有文件夹重命名为“MachineKeys_old”,并将上述脚本中的新文件夹重命名为“MachineKeys”。我重新启动了服务器以确保一切正常,结果确实如此。SQL、IIS,一切都正常。

还有一件事需要注意——确保为新的 MachineKeys 文件夹分配了适当的权限。对我来说,我必须授予“每个人”读/写/修改权限。

相关内容