Список сертификатов на сервере и дни до их истечения
На продакшн-сервере упал веб-сервис, выяснилось, что SSL-сертификат истёк в 00:01, а пользователи начали получать ошибки подключения. Пришлось оперативно проверять все сертификаты.
Для быстрой диагностики я написал PowerShell-скрипт, который подключается к списку серверов, собирает все сертификаты и рассчитывает, сколько дней осталось до их истечения:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$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 с ежедневным запуском.