В доменной инфраструктуре удобно управлять сертификатами. Можно настроить внутренний CA, автоматическую выдачу сертификатов и перевыпуск при истечении срока их действия. В некоторых случаях это не работает. Например, для фермы терминальных серверов приходится выпускать, устанавливать и обновлять сертификаты вручную. И это не единственный случай, когда за сертификатами нужно следить, чтобы не пропустить момент, когда их необходимо заменить.
Поэтому возникает задача контроля за сертификатами.
Для этого можно использовать Powershell. Техника описана в статье Use PowerShell to Find Certificates that are About to Expire.
Для Powershell 3.0 получение просроченные сертификатов выглядит так:
Get-ChildItem -Path cert: -Recurse -ExpiringInDays 75
Для Powershell 2.0 тоже самое немного сложнее:
Get-ChildItem -Recurse | where { $_.notafter -le (get-date).AddDays(75) -AND $_.notafter -gt (get-date)} | select thumbprint, subject
Как настроить контроль сертификатов на множестве компьютеров? Для автоматизации удобнее всего применить Operation Manager, который может доставить скрипт на нужные компьютеры и сформировать алерт при необходимости. Как это сделать описано в статье OpsMgr: Monitoring Certificate Expiry with a Powershell-based Monitor.
Бонус статьи в том, что используемый Management Pack позволяет создавать произвольные мониторы на базе Powershell скриптов.
Так как мониторить нужно только «свои» сертификаты, а они установлены в контейнер Cert:\LocalMachine\My, то именно в этом контейнере будем проверять сертификаты. Если искать сертификаты от корня Cert:, то будет много алертов на корневые коммерческие сертификаты, а это нас совсем не интересует в рамках поставленной задачи.
Поэтому рабочий скрипт выглядит так:
$currentlocation = Get-Location
sl Cert:\LocalMachine\My
$thresholdindays = 90
$ExpiredCerts = Get-ChildItem -Recurse | where { $_.notafter -le (get-date).AddDays($thresholdindays)-AND $_.notafter -gt (get-date)} | select thumbprint, subject, notafter
$API = new-object -comObject «MOM.ScriptAPI»
$PropertyBag = $API.CreatePropertyBag()
if($ExpiredCerts.Length -gt 0) {
$OFS = «`r`n»
$result1 = [system.String]::Join($ofs, $ExpiredCerts)
$result2 = [string]$result1
$result2 = $result2 -replace «@{«, «»
$result2 = $result2 -replace «}», «»
$PropertyBag.AddValue(«State»,«ERROR»)
$PropertyBag.AddValue(«Description», «Expired Certificates: « + $result2)
}
else {
$PropertyBag.AddValue(«State»,«OK»)
$PropertyBag.AddValue(«Description», «ALL GOOD !!»)
}
sl $currentlocation
$PropertyBag
Теперь за три месяца (90 дней) до истечения срока действия сертификата вы получите в SCOM алерт, который будет висеть до замены сертификата или пока он не будет просрочен (или удалён).
Filed under: Operations Manager, Powershell | Tagged: Certificates, Operations Manager, OpsMgr, Powershell | 2 комментария »