Из жизни. На продакшн-сервере упал веб-сервис, выяснилось, что SSL-сертификат истёк в 00:01, а пользователи начали получать ошибки подключения. Пришлось оперативно проверять все сертификаты.
Для быстрой диагностики я написал PowerShell-скрипт, который подключается к списку серверов, собирает все сертификаты и рассчитывает, сколько дней осталось до их истечения:
$servers = @("web01","web02","web03")
$results = foreach($server in $servers) {
Write-Verbose "Проверяю сертификаты на $server"
Get-ChildItem -Path "\\$server\C$\Windows\System32\certsrv\CertEnroll" -Recurse -Include *.cer,*.pfx |
ForEach-Object {
try {
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($_.FullName)
[PSCustomObject]@{
Server = $server
Subject = $cert.Subject
NotAfter = $cert.NotAfter
DaysLeft = ($cert.NotAfter - (Get-Date)).Days
}
} catch {
Write-Warning "Не удалось загрузить сертификат из $($_.FullName) на $server"
}
}
}
$results | Sort-Object DaysLeft | Format-Table -AutoSize
Этот скрипт выводит таблицу с оставшимися днями жизни (DaysLeft) каждого сертификата, упорядоченную по возрастанию. Те, у которых
DaysLeft≈0 или отрицательно, сразу бросаются в глаза. В реальной инфраструктуре я добавил отправку результата по e-mail через Send-MailMessage и запланировал задачу в Task Scheduler с ежедневным запуском.📲 Мы в MAX
👉 @win_sysadmin