我有多个使用 Microsoft PEAP 和自签名证书的 NPS 网络策略。当我们的内部 CA 自动续订证书时,所有网络策略都会切换到安装在 NPS 服务器上的另一个(似乎是随机的)证书。当这种情况发生时,无线客户端无法进行身份验证,从而对我们的基础设施造成严重破坏。
自签名证书所基于的证书模板会在证书到期前 6 周自动续订证书。为了缓解这个问题,我给自己设置了一个提醒,提醒我编辑 NPS 策略并选择续订的证书。但我是一名 IT 消防员,有时火灾会让我无法完成日常任务,甚至是重要的任务。
有没有办法告诉 NPS 使用更新的证书而不是随机选择一些证书?
答案1
这个问题困扰了我好几年。我想我终于找到了一个解决方案,涉及修改 ias.xml 配置文件的文本。我编写了一个 PS 函数,用 nps 证书的指纹替换 xml 文件中的证书指纹。如果 System32\ias 中的配置文件日期早于证书的不早于日期,我们将在主服务器上运行此功能。我们还在导入配置之前在我们同步主服务器配置的每个从属服务器上运行该例程。我们使用 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
}
答案2
当配置为供网络策略使用的证书自动续订时,无法控制 NPS 将选择哪个证书。因此,最佳做法是执行以下操作:
- 手动更新自签名证书前证书自动更新,然后
- 立即编辑所有受影响的 NPS 网络策略以使用更新的证书。