Beherrschen von Zertifikatsablauf-Warnmeldungen mit PowerShell für verbesserte IT-Sicherheit

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.

Zugang erhalten

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.

Nächste Schritte

Der Aufbau eines effizienten und effektiven IT-Teams erfordert eine zentralisierte Lösung, die als einheitliches Tool zur Bereitstellung von IT-Dienstleistungen fungiert. NinjaOne ermöglicht es IT-Teams, alle Geräte zu überwachen, zu verwalten, zu sichern und zu unterstützen, unabhängig vom Standort, ohne dass eine komplexe Infrastruktur vor Ort erforderlich ist.

Erfahren Sie mehr über NinjaOne Remote Script Deployment, sehen Sie sich eine Live-Tour an oder starten Sie Ihre kostenlose Testversion unserer NinjaOne Plattform.

Kategorien:

Das könnte Sie auch interessieren

×

Sehen Sie NinjaOne in Aktion!

Mit dem Absenden dieses Formulars akzeptiere ich die Datenschutzerklärung von NinjaOne.

NinjaOne Allgemeine Geschäftsbedingungen für Skripte

Indem Sie unten auf die Schaltfläche “Ich akzeptiere” klicken, erklären Sie Ihr Einverständnis mit den folgenden rechtlichen Bedingungen sowie mit unseren Nutzungsbedingungen:

  • Eigentumsrechte: NinjaOne besitzt und wird weiterhin alle Rechte, Titel und Interessen an dem Skript (einschließlich des Urheberrechts) behalten. NinjaOne gewährt Ihnen eine eingeschränkte Lizenz zur Nutzung des Skripts in Übereinstimmung mit diesen rechtlichen Bedingungen.
  • Einschränkung der Nutzung: Sie dürfen das Skript nur für Ihre legitimen persönlichen oder internen Geschäftszwecke verwenden und es nicht an Dritte weitergeben.
  • Verbot der Wiederveröffentlichung: Sie sind unter keinen Umständen berechtigt, das Skript in einer Skriptbibliothek, die einem anderen Softwareanbieter gehört oder von diesem kontrolliert wird, erneut zu veröffentlichen.
  • Gewährleistungsausschluss: Das Skript wird “wie gesehen” und “wie verfügbar” bereitgestellt, ohne jegliche Garantie. NinjaOne gibt keine Versprechen oder Garantien, dass das Skript frei von Fehlern ist oder dass es Ihre speziellen Bedürfnisse oder Erwartungen erfüllt.
  • Risikoübernahme: Die Verwendung des Skripts erfolgt auf eigene Gefahr. Sie erkennen an, dass die Nutzung des Skripts mit bestimmten Risiken verbunden ist, und Sie verstehen und übernehmen jedes dieser Risiken.
  • Verzicht und Freigabe: Sie machen NinjaOne nicht für nachteilige oder unbeabsichtigte Folgen verantwortlich, die sich aus Ihrer Nutzung des Skripts ergeben, und Sie verzichten auf alle gesetzlichen oder billigkeitsrechtlichen Rechte oder Rechtsmittel, die Sie gegen NinjaOne im Zusammenhang mit Ihrer Nutzung des Skripts haben könnten.
  • EULA: Wenn Sie ein NinjaOne-Kunde sind, unterliegt Ihre Nutzung des Skripts dem für Sie geltenden Endbenutzer-Lizenzvertrag (EULA).