在带有IIS的Windows2012Web服务器上,我们有一个在C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys中生成证书并保存密钥的R2应用程序。我们已经修复了这个问题,但是现在文件夹中有超过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 }}
}
然而,我不知道如何处理这些信息。这里有数以百万计的文件,所以除了上面脚本所报告的文件之外,我是否都能安全地处理这些文件呢?
发布于 2019-06-22 02:17:16
我想出了办法。首先,我使用这个脚本编译了一个需要保存的证书列表:
$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文件夹分配了适当的权限。对我来说,我不得不给予“每个人”读/写/修改“访问权”。
https://serverfault.com/questions/972162
复制相似问题