У нас возникла странная проблема, затрагивающая очень небольшое количество (1%) клиентов Windows 7 в нашем домене.
Этим ноутбукам выдается компьютерный сертификат (X509) через AD для доступа к VPN. У нас есть сценарий PowerShell, который запускается ежедневно на каждом из этих ноутбуков, который проверяет дату истечения срока действия сертификата и, если это меньше, чем X дней в будущем, удаляет сертификат из хранилища и вызывает "gpupdate / force" для повторного -получить его с новым таймером истечения срока.
(В нашем случае X больше, чем 18 дней, которые AD обычно использует для автоматического продления. У нас много пользователей, которые отключены от сети более 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"
Все это приводит меня к вопросу: когда удаленный сертификат действительно исчез (и его можно будет получить повторно)?
Или, как вариант: что может помешать повторному получению сертификата?