![已删除的 Windows 计算机证书何时才真正消失?](https://linux22.com/image/638415/%E5%B7%B2%E5%88%A0%E9%99%A4%E7%9A%84%20Windows%20%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%AF%81%E4%B9%A6%E4%BD%95%E6%97%B6%E6%89%8D%E7%9C%9F%E6%AD%A3%E6%B6%88%E5%A4%B1%EF%BC%9F.png)
我们遇到了一个奇怪的问题,影响了我们域中极少数 (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"
所有这些都让我想到一个问题:已删除的证书何时真正消失(并且可以重新获取)?
或者:什么可以阻止重新获取证书?