Windows

Windows 2012 R2 Server - 如何從 C:ProgramDataMicrosoftCryptoRSAMachineKeys 安全刪除文件

  • June 27, 2019

在帶有 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 }}
}

但是,我不知道如何處理這些資訊。有數以百萬計的文件,所以除了上面腳本報告的文件之外,我應該能夠安全地處理所有這些文件嗎?

我能夠弄清楚這一點。首先,我使用此腳本編譯需要保留的證書列表:

$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