Windows

控制自動續訂證書時 NPS 網路策略選擇哪個證書

  • May 18, 2021

我有多個使用帶有自簽名證書的 Microsoft PEAP 的 NPS 網路策略。當我們的內部 CA 自動更新證書時,所有網路策略都會切換到 NPS 伺服器上安裝的另一個(看起來是隨機的)證書。發生這種情況時,無線客戶端無法進行身份驗證,從而對我們的基礎架構造成嚴重破壞。

自簽名證書所基於的證書模板會在證書到期前 6 周自動更新證書。為了緩解此問題,我為自己設置了一個提醒,以編輯 NPS 策略並選擇續訂的證書。但我是一名 IT 消防員,有時火災讓我無法完成日常任務,甚至是重要的任務。

有沒有辦法告訴 NPS 使用更新的證書而不是隨機選擇一些證書?

當配置為由網路策略使用的證書自動續訂時,無法控制 NPS 將選擇哪個證書。因此,最好的做法是執行以下操作:

  1. 在證書自動續訂之前手動續訂自簽名證書,然後
  2. 立即編輯所有受影響的 NPS 網路策略以使用續訂的證書。

這個問題困擾了我多年。我想我終於找到了一個涉及修改 ias.xml 配置文件文本的解決方案。我編寫了一個 PS 函式,將 xml 文件中的證書指紋替換為 nps 證書的指紋。如果 System32\ias 中的配置文件日期早於證書的 notbefore 日期,我們將在主伺服器上執行此函式。在導入配置之前,我們還在每個同步主配置的從伺服器上執行常式。我們使用 PEAP MSCHAPv2,因此請確認指紋在您的配置文件中的相同位置。帶有配置的 xml 元素稱為 msEAPConfiguration。我們所有的 PEAP 配置的長度都是 1728。證書指紋從索引 72 開始,長度為 40 個字元。有些配置較短,但我還沒有調查過它們。

function replace-certThumbprint {
   param (
       $srcNPSConfigPath, $newThumbprint
   )
   # read xml file for iteration
   [xml]$npsXmlFile = Get-Content -path $srcNPSConfigPath

   # read raw xml file for overwrite
   $rawXML = Get-Content -Path $srcNPSConfigPath -Raw

   # get eap config part of xml file
   $eapNodes = $npsXmlFile.getelementsbytagname("msEAPConfiguration")

   # find certificate thumbprint in nodes
   foreach ($node in $eapNodes) {
       # confirm node is 1728 char long
       if ($node.'#text'.Length -eq 1728) {
           # save original node text
           $origNode = $node.'#text'
           # get thumbprint from node
           $thumbprint = $node.'#text'.substring(72, 40)
           # replace thumbprint of old cert with new cert if not present
           if ($origNode.indexof($newThumbprint) -eq -1) {
               # node text does not contain new thumbprint
               # replace node text in raw xml file with new node text
               $rawXML = $rawXML -replace $origNode, ($origNode -replace $thumbprint, $newThumbprint)
           }
       }
       # $node | fl *
   }



   $rawXML | set-content -Path $srcNPSConfigPath -Force

}

引用自:https://serverfault.com/questions/800773