Tags: Zertifikate, PowerShell
Läuft etwa ein SSL-Zertifikat auf einem Web-Server, RD Gateway oder WSUS-Server ab, dann ist deren Service in der Regel nicht mehr zugänglich. Um solche Situationen zu vermeiden, sollte man die Gültigkeit von Zertifikaten laufend prüfen. Das lässt sich auch mit einem PowerShell-Script erledigen.
Für Web-Server, die über das öffentliche Internet erreichbar sind, gibt es zahlreiche Online-Dienste, die in regelmäßigen Intervallen prüfen, wann Zertifikate ablaufen und den Webmaster rechtzeitig verständigen. Im Firmennetz können viele Monitoring-Tools diese Aufgabe übernehmen.
Wer sich dafür auf die Bordmittel beschränken möchte, kann zu PowerShell greifen. Mit Hilfe eines relativ einfachen Scripts lassen sich alle Server auf Zertifikate abklappern, die ihr Ablaufdatum in Kürze erreichen.
Alle Server aus dem AD auslesen
Das folgende Beispiel liest dazu alle Computer aus dem Active Directory aus, die unter Windows Server laufen, und greift remote auf deren Zertifikatspeicher unter LocalMachine\my zu. Es gibt alle Zertifikate aus, die in weniger als 14 Tagen ablaufen oder die bereits abgelaufen sind.
Um zu verhindern, dass das Script hängt, wenn ein Server nicht erreichbar ist, prüft der Aufruf von Test-Connection, ob der betreffende Ziel-Host online ist.
Bei Bedarf könnte man die Liste der Server einschränken, indem man mit SearchBase bestimmte OUs angibt oder sie alternativ aus einer Textdatei ausliest.
Das Script ist zudem für die interaktive Ausführung gedacht und zeigt mit Write-Progress den Fortschritt der Operation an. Stattdessen könnte man es natürlich für die Ausführung als Task optimieren und sich per E-Mail benachrichtigen lassen, falls ein Zertifikat in Kürze abläuft.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- Lets Encrypt-Zertifikat mit ACME2-Client ausstellen, installieren, automatisch erneuern
- (Selbstsignierte) Zertifikate über Gruppenrichtlinien oder PowerShell importieren
- Get-Certificate: SSL-Zertifikat mit PowerShell anfordern
- PowerShell Remoting über HTTPS mit einem selbstsignierten SSL-Zertifikat
- New-SelfSignedCertificate: Selbstsignierte Zertifikate ausstellen mit PowerShell
Weitere Links
1 Kommentar
Gute Idee und schönes kleines Script!
Beim Invoke-Command habe ich noch "-ScriptBlock { XXXXXXX } anfügen müssen.
$cred = Get-Credential
$c = 0
$servers = Get-ADComputer -Filter "OperatingSystem -like 'Windows Server*'"
$servers | foreach {
$p = ($c++/$servers.count) * 100
Write-Progress -Activity "Prüfe $_" -Status "$p % fertig" -PercentComplete $p;
if(Test-Connection -ComputerName $_.DNSHostName -Count 2 -Quiet){
Invoke-Command -ComputerName $_.DNSHostName -Credential $cred `
-ScriptBlock { {dir Cert:\LocalMachine\my | ? NotAfter -lt (Get-Date).AddDays(14)} }
}
}
Was man auch machen kann ist die Variante über ein Monitoring Tool. Beispielsweise Check_MK (gibts auch als Community Variante) oder Paessler. Die können das auch abfragen.
Für hausinterne Zertifikate bei Windows Systemen gefällt mir persönlich die automatische Verlängerung (GPO gesteuert etc.) am besten. Bei gekauften von externen Stellen unterschriebenen Zertifikaten kann das eine gute Ergänzung sein.
Wie so oft muss man sagen --> kommt drauf an was für einen das passende ist!