已删除的 Windows 计算机证书何时才真正消失?

已删除的 Windows 计算机证书何时才真正消失?

我们遇到了一个奇怪的问题,影响了我们域中极少数 (1%) 的 Windows 7 客户端。

这些笔记本电脑通过 AD 颁发了计算机证书 (X509),用于 VPN 访问。我们有一个 PowerShell 脚本,每天在每台笔记本电脑上运行,检查证书的到期日期,如果到期日期少于未来 X 天,则从存储中删除证书并调用“gpupdate /force”以使用新的到期计时器重新获取证书。

(在我们的例子中,X 大于 AD 通常用于自动续订的 18 天。我们有许多用户当时离线超过 18 天,因此默认的 18 天太短了。必须删除该证书,否则“gpupdate /force”不会执行任何操作。)

在我们 99% 的计算机中,这都按预期工作。但是,我们遇到了几台机器,在删除证书后,除非重新启动计算机并重新与域建立新的计算机会话,否则不会自动重新获取证书。Gpupdate
不会重新获取证书,Windows 在后台每 90-120 分钟进行的正常定期策略检查也不会重新获取证书。
重新启动后,计算机将立即从 AD 中获取新证书。
(显然:用户在度假或长时间出差之前不会进行额外的重新启动,因此他们在茫茫荒野中发现他们的 VPN 无法工作,因为证书丢失了。)

删除后,证书似乎一直处于“锁定”或“待处理”状态,直到下次重新启动。正常更新过程显然仍“看到”旧证书,因此没有理由获取新证书。

顺便说一句:删除和随后的 gpupdate 是通过 PowerShell 中的这段代码完成的。
在我看来,这没什么问题,生成的日志文件中也没有出现任何奇怪的情况。

$store = New-Object System.Security.Cryptography.X509Certificates.X509Store("My", "LocalMachine")
$store.Open("ReadWrite")

foreach ($cert in $store.Certificates) 
{
    $subject = $cert.Subject
    send2log "Deleting certificate: $subject"
    if ($cert.Issuer -match "CN=XX-XX-XXX.*") 
    {
        $store.Remove($cert)
    }
}
$store.Close()
$out = & gpupdate.exe /force
send2log "$out"

所有这些都让我想到一个问题:已删除的证书何时真正消失(并且可以重新获取)?
或者:什么可以阻止重新获取证书?

相关内容