Die wichtigsten Erkenntnisse
- Automatisierte Warnmeldungen: Das Skript bietet automatisierte Benachrichtigungen für Zertifikate, die bald ablaufen.
- Anpassbare Parameter: Benutzer:innen können Parameter für Ablaufzeiträume und den Ausschluss von selbstsignierten Zertifikaten festlegen.
- Verbesserte Sicherheit: Rechtzeitige Warnmeldungen tragen zur Aufrechterhaltung der Sicherheit bei, indem sie Schwachstellen als Folge von abgelaufenen Zertifikaten verhindern.
- Kompatibilität und Anforderungen: Unterstützt Windows 7, Server 2008 und höher, mit bestimmten PowerShell-Versionen und Berechtigungsanforderungen.
- Skalierbarkeit: Skalierbarer und anpassbarer als GUI-basierte Zertifikatsverwaltungs-Tools.
- Proaktive Compliance: Hilft bei der Compliance, indem das Skript sicherstellt, dass die Zertifikate rechtzeitig erneuert werden.
- Integration mit MSP-Tools: Kann für ein umfassendes IT-Management in MSP-Lösungen wie NinjaOne integriert werden.
Die Verwaltung digitaler Zertifikate ist ein wichtiger Aspekt der IT-Sicherheit und der Compliance. Das Übersehen des Ablaufs von Zertifikaten kann zu erheblichen Sicherheitsrisiken, Systemausfällen und Vertrauensverlusten führen. Ein proaktiver Ansatz bei der Verwaltung von Zertifikaten ist für die Aufrechterhaltung der Integrität und Zuverlässigkeit von IT-Systemen unerlässlich.
Kontext
Dieses PowerShell-Skript ist ein vielseitiges Tool für IT-Expert:innen und Managed Service Provider (MSPs). Es benachrichtigt Benutzer:innen über lokale Zertifikate, die bald ablaufen, und bietet die Möglichkeit, selbstsignierte, längst abgelaufene oder sehr kurzfristige Zertifikate zu ignorieren. Dieses Skript ist besonders wichtig in Umgebungen, in denen das Ablaufen von Zertifikaten zu Störungen oder Sicherheitsschwachstellen führen kann.
Das Skript für die Einrichtung von Warnungen vor ablaufenden Zertifikaten
<# .SYNOPSIS Alerts when a local certificate will expire in a configurable number of days. Can optionally ignore self-signed certificates, certificates that have been expired for a long time and certificates that were only valid for an extremely short time frame. .DESCRIPTION Alerts when a local certificate will expire in a configurable number of days. Can optionally ignore self-signed certificates, certificates that have been expired for a long time and certificates that were only valid for an extremely short time frame. .EXAMPLE (No Parameters) Checking for certificates that were valid before 10/10/2023 09:07:23 and will expire before 11/11/2023 09:07:23. No Certificates were found with an expiration date before 11/11/2023 09:07:23 and after 07/13/2023 09:07:23. PARAMETER: -DaysUntilExpiration "ReplaceWithNumber" Alerts if a certificate is set to expire within the specified number of days. .EXAMPLE -DaysUntilExpiration "366" Checking for certificates that were valid before 10/10/2023 09:08:14 and will expire before 10/12/2024 09:08:14. WARNING: Expired Certificates found! ### Expired Certificates ### SerialNumber HasPrivateKey ExpirationDate Subject ------------ ------------- -------------- ------- 0AA60783EBB5076EBC2D12DA9B04C290 False 6/10/2024 4:59:59 PM CN=Insecure.Com LLC, O=Insecure.Com... 619DCC976458E38D471DC3DCE3603C2C True 3/29/2024 10:19:00 AM CN=KYLE-SRV22-TEST.test.lan 0AA60783EBB5076EBC2D12DA9B04C290 False 6/10/2024 4:59:59 PM CN=Insecure.Com LLC, O=Insecure.Com... 7D5FC733E3A8CF9344CDDFC0AB01CCB9 True 4/9/2024 9:53:53 AM CN=KYLE-SRV22-TEST.test.lan 4EDC0A79D6CD5A8D4D1E3705BC20C206 True 4/9/2024 9:58:06 AM CN=KYLLE-SRV22-TEST.test.lan PARAMETER: -MustBeValidBefore "ReplaceWithNumber" Only alert on certificates that are older than X days. This is primarily to silence alerts about certificates that were only valid for 24 hours in their entire lifetime. PARAMETER: -Cutoff "ReplaceWithNumber" Don't alert on certificates that have been expired for longer than X days (default is 91 days). PARAMETER: -IgnoreSelfSignedCerts Ignore certificates where the subject of the certificate and the issuer of the certificate are identical. .OUTPUTS None .NOTES Minimum OS Architecture Supported: Windows 7, Server 2008 Release Notes: Initial Release By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use. Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA). #> [CmdletBinding()] param ( [Parameter()] [String]$ExpirationFromCustomField = "certExpirationAlertDays", [Parameter()] [int]$DaysUntilExpiration = 30, [Parameter()] [int]$MustBeValidBefore = 2, [Parameter()] [int]$Cutoff = 91, [Parameter()] [Switch]$IgnoreSelfSignedCerts = [System.Convert]::ToBoolean($env:ignoreSelfSignedCerts) ) begin { # Retrieve script variables from the dynamic script form. if ($env:expirationFromCustomFieldName -and $env:expirationFromCustomFieldName -notlike "null") { $ExpirationFromCustomField = $env:expirationFromCustomFieldName } if ($env:daysUntilExpiration -and $env:daysUntilExpiration -notlike "null") { $DaysUntilExpiration = $env:daysUntilExpiration } if ($env:certificateMustBeOlderThanXDays -and $env:certificateMustBeOlderThanXDays -notlike "null") { $MustBeValidBefore = $env:certificateMustBeOlderThanXDays } if ($env:skipCertsExpiredForMoreThanXDays -and $env:skipCertsExpiredForMoreThanXDays -notlike "null") { $Cutoff = $env:skipCertsExpiredForMoreThanXDays } function Test-IsElevated { $id = [System.Security.Principal.WindowsIdentity]::GetCurrent() $p = New-Object System.Security.Principal.WindowsPrincipal($id) $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator) } # If using the custom field option, check for the default value and replace it if necessary. if ($PSVersionTable.PSVersion.Major -gt 2) { $CustomField = Ninja-Property-Get -Name $ExpirationFromCustomField 2>$Null } if ($CustomField -and $DaysUntilExpiration -eq 30 -and (Test-IsElevated) -and $PSVersionTable.PSVersion.Major -gt 2) { Write-Host "Retrieved value of $CustomField days from Custom Field $ExpirationFromCustomField. Using it for expiration value." $DaysUntilExpiration = $CustomField } elseif (-not (Test-IsElevated) -or $PSVersionTable.PSVersion.Major -le 2) { Write-Warning "Skipping CustomField retrieval due to either incompatible PowerShell version or lack of elevation." } } process { # Calculate expiration and cutoff dates. $ExpirationDate = (Get-Date "11:59pm").AddDays($DaysUntilExpiration) $CutoffDate = (Get-Date "12am").AddDays(-$Cutoff) $MustBeValidBeforeDate = (Get-Date "12am").AddDays(-$MustBeValidBefore) # Retrieve all certificates. $Certificates = Get-ChildItem -Path "Cert:\" -Recurse Write-Host "Checking for certificates that were valid before $MustBeValidBeforeDate and will expire before $ExpirationDate." # Filter down to certificates that are expired in our desired date range $ExpiredCertificates = $Certificates | Where-Object { $_.NotAfter -le $ExpirationDate -and $_.NotAfter -gt $CutoffDate -and $_.NotBefore -lt $MustBeValidBeforeDate } # If we're asked to ignore self signed certs we'll filter them out if ($IgnoreSelfSignedCerts -and $ExpiredCertificates) { Write-Host "Removing Self-Signed certificates from list." $ExpiredCertificates = $ExpiredCertificates | Where-Object { $_.Subject -ne $_.Issuer } } if ($ExpiredCertificates) { Write-Host "" Write-Warning "Expired Certificates found!" Write-Host "" $Report = $ExpiredCertificates | ForEach-Object { # Subject can be a long property, we'll truncate it to maintain readability New-Object PSObject -Property @{ SerialNumber = $_.SerialNumber HasPrivateKey = $_.HasPrivateKey ExpirationDate = $_.NotAfter Subject = if ($_.Subject.Length -gt 35) { $_.Subject.Substring(0, 35) + "..." }else { $_.Subject } } } Write-Host "### Expired Certificates ###" $Report | Format-Table -AutoSize | Out-String | Write-Host exit 1 } else { Write-Host "No Certificates were found with an expiration date before $ExpirationDate and after $CutoffDate." } } end { }
Greifen Sie auf über 300 Skripte im NinjaOne Dojo zu.
Detaillierte Aufschlüsselung
Das Skript arbeitet in mehreren Phasen:
- Initialisierung: Zunächst werden Standardparameter wie die Anzahl der Tage bis zum Ablauf des Zertifikats und verschiedene Ausschlussfristen festgelegt. Diese können durch Umgebungsvariablen überschrieben werden.
- Umgebungsüberprüfungen: Das Skript überprüft die erforderlichen Berechtigungen und die Kompatibilität der PowerShell-Version und passt sein Verhalten entsprechend an.
- Datenverarbeitung: Es ruft alle Zertifikate aus dem lokalen Speicher ab und filtert sie nach Ablauf, Gültigkeitsdauer und ob sie selbstsigniert sind, entsprechend den angegebenen Parametern.
- Berichterstellung: Wenn abgelaufene Zertifikate gefunden werden, wird ein Bericht erstellt, der die Details auflistet, andernfalls wird angezeigt, dass keine entsprechenden Zertifikate gefunden wurden.
Visuelle Hilfsmittel wie Flussdiagramme könnten diese Phasen wirksam veranschaulichen und den Prozess verständlicher machen.
Mögliche Anwendungsfälle
Stellen Sie sich einen MSP vor, der die IT-Infrastruktur eines Unternehmens überwacht. Er setzen dieses Skript ein, um regelmäßig nach Zertifikaten zu suchen, die bald ablaufen. Dieses Frühwarnsystem ermöglicht die rechtzeitige Erneuerung der Verträge und vermeidet Dienstunterbrechungen oder Sicherheitsverletzungen.
Vergleiche
Dieser PowerShell-Ansatz ist anpassbarer und integrierter als GUI-basierte Zertifikatsverwaltungs-Tools. Sie ermöglicht Automatisierung und ist für große Unternehmen besser skalierbar als manuelle Kontrollen.
FAQs
- Wie bestimmt das Skript, bei welchen Zertifikaten eine Warnmeldung erfolgen soll?
Das Skript verwendet Parameter wie Ablaufdatum, Gültigkeitsdauer und selbstsignierten Status, um Zertifikate zu filtern. - Kann dieses Skript auf jedem Windows-Rechner ausgeführt werden?
Es unterstützt Windows 7 sowie Server 2008 und höher, erfordert jedoch bestimmte Berechtigungen und PowerShell-Versionen für die volle Funktionalität. - Ist es möglich, die Warnkriterien anzupassen?
Ja, das Skript erlaubt die Anpassung von Parametern wie Tage bis zum Ablauf und Ausschlussfristen.
Folgen
Werden die Zertifikate nicht erneuert, kann dies zu Sicherheitsschwachstellen und zum Verlust des Vertrauens der Kund:innen führen. Dieses Skript trägt zur Aufrechterhaltung einer optimalen Sicherheitslage bei, indem es proaktiv Zertifikatserneuerungen verwaltet.
Empfehlungen
- Planen Sie die Ausführung des Skripts regelmäßig, um rechtzeitige Warnmeldungen zu gewährleisten.
- Passen Sie die Parameter an die spezifischen Anforderungen Ihrer IT-Umgebung an.
- Stellen Sie sicher, dass die entsprechenden Berechtigungen und Umgebungseinstellungen für eine korrekte Ausführung vorhanden sind.
Abschließende Überlegungen
Im Rahmen eines umfassenden IT-Managements können Tools wie NinjaOne die Möglichkeiten dieses Skripts erweitern. NinjaOne bietet integrierte Lösungen, die mit solchen Skripten zusammenarbeiten können, um den IT-Betrieb zu optimieren, die Sicherheit zu erhöhen und die Compliance zu gewährleisten.