Windows 2012 R2 Server - Как безопасно удалить файлы из C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
На сервере Windows 2012 R2 с IIS у нас есть веб-приложение, которое генерирует сертификаты в 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. Для меня я должен был дать доступ "Все" для чтения / записи / изменения.