Vor kurzem hatten wir die Aufgabe, die Gültigkeitsdauer von Zertifikaten auf Servern mit Windows zu überwachen. Nun, wie bin ich aufgestanden, nachdem sich die Zertifikate mehrmals in einen Kürbis verwandelt hatten, während der bärtige Kollege, der für ihre Erneuerung verantwortlich war, im Urlaub war? Danach
vermuteten wir
etwas und beschlossen, darüber nachzudenken. Da wir das NetXMS-Überwachungssystem langsam einführen, ist es der Haupt- und im Prinzip der einzige Kandidat für diese Aufgabe.
Das Ergebnis wurde letztendlich wie folgt erhalten:

Und der Prozess selbst ist weiter.
Lass uns gehen. In NetXMS gibt es keinen integrierten Zähler für ablaufende Zertifikate. Sie müssen daher eigene Zertifikate erstellen und Skripts verwenden, um Daten bereitzustellen. Bei Powershell ist es natürlich Windows. Das Skript sollte alle Zertifikate im Betriebssystem lesen, das Ablaufdatum in Tagen von dort abrufen und diese Nummer an NetXMS übertragen. Durch seinen Agenten. Beginnen wir mit ihm.
Option eins , die einfachste. Ermitteln Sie einfach die Anzahl der Tage vor Ablauf des Zertifikats mit dem nächstgelegenen Datum.
Damit der NetXMS-Server von der Existenz unseres benutzerdefinierten Parameters erfahren kann, muss er ihn vom Agenten erhalten. Andernfalls kann dieser Parameter aufgrund seiner Abwesenheit nicht hinzugefügt werden. Daher fügen wir in der
Agentenkonfigurationsdatei nxagentd.conf eine externe Parameterzeile mit dem Namen
HTTPS.CertificateExpireDateSimple hinzu , in die wir das auszuführende Skript schreiben:
ExternalParameter = HTTPS.CertificateExpireDateSimple: powershell.exe -File "\\server\share\NetXMS_CertExpireDateSimple.ps1"
Da das Skript über das Netzwerk ausgeführt wird, dürfen Sie die
Ausführungsrichtlinie nicht vergessen und auch nicht die anderen "-NoLogo -NoProfile -NonInteractive", die ich zur besseren Lesbarkeit des Codes weggelassen habe.
Infolgedessen sieht die Agentenkonfiguration ungefähr so aus:
# # NetXMS agent configuration file # Created by agent installer at Thu Jun 13 11:24:43 2019 # MasterServers = netxms.corp.testcompany.ru ConfigIncludeDir = C:\NetXMS\etc\nxagentd.conf.d LogFile = {syslog} FileStore = C:\NetXMS\var SubAgent = ecs.nsm SubAgent = filemgr.nsm SubAgent = ping.nsm SubAgent = logwatch.nsm SubAgent = portcheck.nsm SubAgent = winperf.nsm SubAgent = wmi.nsm ExternalParameter = HTTPS.CertificateExpireDateSimple: powershell.exe -File "\\server\share\NetXMS_CertExpireDateSimple.ps1"
Danach müssen Sie die Konfiguration speichern und den Agenten neu starten. Sie können dies über die NetXMS-Konsole tun: Öffnen Sie die Konfiguration (Konfigurationsdatei des Agenten bearbeiten), bearbeiten Sie Save & Apply, führen Sie Save & Apply aus, wodurch tatsächlich dasselbe passiert. Lesen Sie dann die Konfiguration erneut (Abfrage> Konfiguration), wenn absolut keine Kraft zum Warten vorhanden ist. Nach diesen Schritten sollten Sie in der Lage sein, unseren benutzerdefinierten Parameter hinzuzufügen.
In der NetXMS-Konsole gehen wir zur
Datenerfassungskonfiguration des experimentellen Servers, auf dem wir die Zertifikate überwachen und dort einen neuen Parameter erstellen möchten (in Zukunft ist es nach dem Einrichten sinnvoll, ihn auf die Vorlagen zu übertragen). Wir wählen HTTPS.CertificateExpireDateSimple aus der Liste aus, geben Description mit einem Anzeigenamen ein, setzen den Typ auf Integer und legen das Abfrageintervall fest. Es macht keinen Sinn, es zu kurz zu machen, um die Datenbank nicht mit unnötigen Informationen zu verstopfen. Es ist unpraktisch, bei der Überprüfung zu lange zu warten. Für Zertifikate stelle ich normalerweise 600 Sekunden ein. Zum Zeitpunkt des Debuggens ist es sinnvoll, es kürzer zu machen (30 Sekunden), zum Beispiel:

Alles ist fertig, solange genug. Sie können überprüfen ... nein, es ist zu früh. Jetzt bekommen wir natürlich nichts mehr. Nur weil das Skript noch nicht geschrieben wurde. Wir korrigieren diese Auslassung. Das Skript gibt nur eine Zahl aus, die Anzahl der verbleibenden Tage bis zum Ablauf des Zertifikats. Das kleinste von allen verfügbaren. Beispielskript:
try {
Es stellt sich so heraus:

723 Tage, bevor das Zertifikat für fast zwei weitere Jahre abläuft. Dies ist logisch, da ich kürzlich Zertifikate auf dem Exchange-Testbed neu signiert habe.
Es war eine einfache Option. Wahrscheinlich würde jemand damit zufrieden sein, aber wir wollten mehr. Wir haben uns die Aufgabe gestellt, eine Liste aller Zertifikate auf dem Server nach Namen abzurufen und für jedes Zertifikat die Anzahl der verbleibenden Tage bis zum Ablauf des Zertifikats anzuzeigen.
Die zweite Option ist etwas komplizierter.
Wieder bearbeiten wir die Agentenkonfiguration und dort schreiben wir anstelle der Zeile mit ExternalParameter zwei weitere:
ExternalList = HTTPS.CertificateNames: powershell.exe -File "\\server\share\netxms_CertExternalNames.ps1" ExternalParameter = HTTPS.CertificateExpireDate(*): powershell.exe -File "\\server\share\netxms_CertExternalParameter.ps1" -CertificateId "$1"
In
ExternalList erhalten wir nur eine Liste von Zeichenfolgen. In unserem Fall eine Liste von Zeichenfolgen mit Zertifikatsnamen. Eine Liste dieser Zeilen erhalten wir das Skript. Der Listenname lautet
HTTPS.CertificateNames .
Skript NetXMS_CertNames.ps1:
Und bereits in
ExternalParameter geben wir die Zeilen aus der ExternalList-Liste ein, und für die Ausgabe erhalten wir jeweils die gleiche Anzahl von Tagen. Die Kennung ist das Fingerabdruckzertifikat. Bitte beachten Sie, dass HTTPS.CertificateExpireDate in dieser Option ein Sternchen (*) enthält. Dies ist erforderlich, damit externe Variablen akzeptiert werden, nur unsere CertificateId.
Skript NetXMS_CertExpireDate.ps1:
Erstellen Sie in der Datenerfassungsserverkonfiguration einen neuen Parameter.
Wählen Sie unter Parameter unser
HTTPS.CertificateExpireDate (*) aus der Liste aus und (Aufmerksamkeit!) Ändern Sie das Sternchen in
{instance} . An diesem wichtigen Punkt können Sie für jede Instanz (Zertifikat) einen eigenen Zähler erstellen. Der Rest wird wie in der vorherigen Version ausgefüllt:

Damit die Zähler erstellt werden können, wählen Sie auf der Registerkarte Instanzerkennung die Agentenliste aus der Liste aus und geben Sie im Feld Listenname den Namen unserer externen Liste aus dem Skript ein - HTTPS.CertificateNames.
Warten Sie ein wenig, oder erzwingen Sie Poll> Configuration and Poll> Instance Discovery, wenn Sie nicht warten können. Als Ergebnis erhalten wir alle unsere Zertifikate mit Ablaufdaten:

Was wird benötigt? Nun ja, nur ein Wurm des Perfektionismus betrachtet diesen unnötigen Fingerabdruck im Namen der Theke mit traurigen Augen und erlaubt es nicht, den Artikel zu beenden. Um ihn zu füttern, öffnen Sie die Zählereigenschaften erneut und fügen Sie auf der Registerkarte Instanzerkennung im Feld "Instanzerkennungsfilterskript" das in
NXSL (
NetXMS- interne Sprache) geschriebene
Skript hinzu :
instance = $1; if (instance ~= "^(.*)\s\-\s\[T\:[a-zA-Z0-9]+\]$") { return %(true, instance, $1); } return true;
Dadurch wird der Fingerabdruck gefiltert:

Um es gefiltert anzuzeigen, ändern Sie auf der Registerkarte Allgemein im Feld Beschreibung CertificateExpireDate: {instance} in
CertificateExpireDate: {instance-name} :

Alles, endlich das Ende des
KDPV :

Schönheit?
Es bleibt, Konfigurationen so zu konfigurieren, dass sie per E-Mail ankommen, wenn das Zertifikat an seinem logischen Ende abläuft.
1. Zuerst müssen Sie eine Ereignisvorlage erstellen, um sie zu aktivieren, wenn Sie den Zählerwert auf einen von uns festgelegten Schwellenwert verringern. Erstellen Sie in der
Ereigniskonfiguration zwei neue Vorlagen mit Namen, z. B.
CertificateExpireDate_Threshold_Activate mit dem Warnstatus:

und ähnliches
CertificateExpireDate_Threshold_Deactivate mit normalem Status.
2. Wechseln Sie als Nächstes zu den Zählereigenschaften und legen Sie den Schwellenwert auf der Registerkarte Schwellenwerte fest:

Wenn wir unsere erstellten Ereignisse CertificateExpireDate_Threshold_Activate und CertificateExpireDate_Threshold_Deactivate auswählen, legen Sie die Anzahl der Messungen (Samples) 1 fest (insbesondere macht es keinen Sinn, einen bestimmten Zähler festzulegen). Der Wert beträgt beispielsweise 30 (Tage), und vor allem legen wir die Ereigniswiederholungszeit fest. Für Zertifikate in der Produktion habe ich es einmal am Tag festgelegt (86400 Sekunden), andernfalls können Sie in Warnungen ertrinken (was übrigens einmal passiert ist und außerdem das Postfach über das Wochenende voll war). Für das Debuggen ist es sinnvoll, weniger als 60 Sekunden festzulegen.
3. Erstellen Sie in der
Aktionskonfiguration eine Warnmeldungsvorlage wie die folgende:

Alle diese% m,% S usw. - Makros, in die Werte aus unserem Parameter eingesetzt werden. Sie werden im NetXMS-
Handbuch ausführlicher beschrieben.
4. Wenn Sie die vorherigen Punkte kombinieren, erstellen Sie in der
Ereignisverarbeitungsrichtlinie eine Regel, nach der ein Alarm erstellt und eine Nachricht gesendet wird:

Wir halten die Politik, alles kann getestet werden. Stellen Sie den Schwellenwert für die Überprüfung höher ein. Mein nächstgelegenes Zertifikat läuft in 723 Tagen ab. Ich habe 724 zur Überprüfung festgelegt. Als Ergebnis erhalten wir den folgenden Alarm:

und eine solche Mail-Benachrichtigung:

Das ist alles. Sie können natürlich ein Dashboard einrichten und Diagramme erstellen, aber für Zertifikate sind es etwas bedeutungslose und langweilige gerade Linien, im Gegensatz zu Diagrammen zum Laden von CPU oder Speicher. Aber irgendwie ein anderes Mal.