Récemment, nous avons eu la tâche de surveiller la période de validité des certificats sur les serveurs avec Windows. Eh bien, comment me suis-je levé, après que les certificats se soient transformés en citrouille à plusieurs reprises, en même temps que le collègue barbu responsable de leur renouvellement était en vacances. Après cela, nous avons
soupçonné quelque chose et avons décidé d'y penser. Depuis que nous introduisons lentement le système de surveillance NetXMS, il est devenu le principal et, en principe, le seul candidat pour cette tâche.
Le résultat a finalement été obtenu comme suit:

Et le processus lui-même va plus loin.
Allons-y. Il n'y a pas de compteur intégré pour l'expiration des certificats dans NetXMS, vous devez donc créer le vôtre et utiliser des scripts pour lui fournir des données. Bien sûr, sur Powershell, c'est Windows. Le script doit lire tous les certificats du système d'exploitation, prendre la date d'expiration en jours à partir de là et transférer ce numéro vers NetXMS. Par son agent. Commençons par lui.
Première option , la plus simple. Obtenez simplement le nombre de jours avant l'expiration du certificat avec la date la plus proche.
Pour que le serveur NetXMS apprenne l'existence de notre paramètre personnalisé, il doit le recevoir de l'agent. Sinon, ce paramètre ne peut pas être ajouté en raison de son absence. Par conséquent, dans le fichier de configuration de l'agent
nxagentd.conf , nous ajoutons une ligne de paramètre externe avec le nom
HTTPS.CertificateExpireDateSimple , dans laquelle nous écrivons le script à exécuter:
ExternalParameter = HTTPS.CertificateExpireDateSimple: powershell.exe -File "\\server\share\NetXMS_CertExpireDateSimple.ps1"
Étant donné que le script s'exécute sur le réseau, vous devez vous souvenir de la
politique d'exécution , ainsi que de l'autre "-NoLogo -NoProfile -NonInteractive", que j'ai omis pour une meilleure lisibilité du code.
Par conséquent, la configuration de l'agent ressemble à ceci:
# # 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"
Après cela, vous devez enregistrer la configuration et redémarrer l'agent. Vous pouvez le faire à partir de la console NetXMS: ouvrez la configuration (fichier de configuration de l'agent Edit), modifiez, exécutez Save & Apply, à la suite de quoi, exactement la même chose se produira. Relisez ensuite la configuration (Poll> Configuration), s'il n'y a absolument aucune force à attendre. Après ces étapes, vous devriez pouvoir ajouter notre paramètre personnalisé.
Dans la console NetXMS, nous allons dans la
configuration de collecte de données du serveur expérimental sur lequel nous allons surveiller les certificats et y créer un nouveau paramètre (à l'avenir, après la configuration, il est logique de le transférer vers les modèles). Nous sélectionnons HTTPS.CertificateExpireDateSimple dans la liste, saisissons Description avec un nom convivial, définissons le type sur Entier et définissez l'intervalle d'interrogation. Cela n'a aucun sens de le rendre trop court afin de ne pas obstruer la base de données avec des informations inutiles, il sera gênant d'attendre trop longtemps lors de la vérification. Pour les certificats, je règle généralement 600 secondes. Au moment du débogage, il est logique de le raccourcir, 30 secondes, par exemple:

Tout est prêt, tant qu'il suffit. Vous pouvez vérifier ... non, c'est trop tôt. Maintenant, bien sûr, nous n’obtiendrons rien. Tout simplement parce que le script n'a pas encore été écrit. Nous corrigeons cette omission. Le script ne donnera qu'un nombre, le nombre de jours restants jusqu'à l'expiration du certificat. Le plus petit de tous disponible. Exemple de script:
try {
Il se présente comme ceci:

723 jours, avant l'expiration du certificat pendant près de deux ans de plus. C'est logique, car j'ai récemment re-signé des certificats sur le banc d'essai Exchange.
C'était une option facile. Quelqu'un serait probablement content de cela, mais nous en voulions plus. Nous nous sommes fixé pour tâche d'obtenir une liste de tous les certificats sur le serveur, par nom, et pour chacun de voir le nombre de jours restants jusqu'à l'expiration du certificat.
La deuxième option , un peu plus compliquée.
Encore une fois, nous éditons la configuration de l'agent et là, au lieu de la ligne avec ExternalParameter, nous en écrivons deux autres:
ExternalList = HTTPS.CertificateNames: powershell.exe -File "\\server\share\netxms_CertExternalNames.ps1" ExternalParameter = HTTPS.CertificateExpireDate(*): powershell.exe -File "\\server\share\netxms_CertExternalParameter.ps1" -CertificateId "$1"
Dans
ExternalList, nous obtenons juste une liste de chaînes. Dans notre cas, une liste de chaînes avec des noms de certificats. Une liste de ces lignes, nous obtenons le script. Le nom de la liste est
HTTPS.CertificateNames .
Script NetXMS_CertNames.ps1:
Et déjà dans
ExternalParameter, nous alimentons les lignes de la liste ExternalList, et sur la sortie, nous obtenons le même nombre de jours pour chacun. L'identifiant est le certificat d'empreinte numérique. Veuillez noter que HTTPS.CertificateExpireDate dans cette option contient un astérisque (*). Ceci est nécessaire pour qu'il accepte des variables externes, juste notre CertificateId.
Script NetXMS_CertExpireDate.ps1:
Dans la configuration du serveur de collecte de données, créez un nouveau paramètre. Dans Parameter, sélectionnez notre
HTTPS.CertificateExpireDate (*) dans la liste et (attention!) Remplacez l'astérisque par
{instance} . Ce point important vous permettra de créer un compteur séparé pour chaque instance (certificat). Le reste est rempli, comme dans la version précédente:

Pour que les compteurs puissent être quelque chose à partir duquel créer, dans l'onglet Découverte d'instance, sélectionnez la liste des agents dans la liste et dans le champ Nom de la liste, entrez le nom de notre liste externe dans le script - HTTPS.CertificateNames.
Presque prêt, attendez un peu ou forcez Poll> Configuration et Poll> Découverte d'instance, s'il est complètement impossible d'attendre. En conséquence, nous obtenons tous nos certificats avec des dates d'expiration:

De quoi a-t-on besoin? Eh bien, oui, seul un ver de perfectionnisme regarde cette empreinte inutile au nom du comptoir avec des yeux tristes et ne permet pas de terminer l'article. Pour le nourrir, ouvrez à nouveau les propriétés du compteur et sur l'onglet Découverte d'instance dans le champ «Script de filtre de découverte d'instance» ajoutez le script écrit en
NXSL (langage interne
NetXMS ):
instance = $1; if (instance ~= "^(.*)\s\-\s\[T\:[a-zA-Z0-9]+\]$") { return %(true, instance, $1); } return true;
qui filtrera l'empreinte numérique:

Et pour l'afficher filtré, dans l'onglet Général du champ Description, remplacez CertificateExpireDate: {instance} par
CertificateExpireDate: {nom-instance} :

Tout, enfin l'arrivée du
KDPV :

La beauté?
Il reste à configurer les alertes pour qu'elles arrivent par mail lorsque le certificat expire à sa fin logique.
1. Vous devez d'abord créer un modèle d'événement pour l'activer lorsque vous diminuez la valeur du compteur à un certain seuil défini par nous. Dans
Configuration des événements, créez deux nouveaux modèles avec des noms, par exemple
CertificateExpireDate_Threshold_Activate avec l'état d'avertissement:

et
CertificateExpireDate_Threshold_Deactivate similaire avec le statut Normal.
2. Ensuite, accédez aux propriétés du compteur et définissez le seuil dans l'onglet Seuils:

où nous sélectionnons nos événements créés CertificateExpireDate_Threshold_Activate et CertificateExpireDate_Threshold_Deactivate, définissons le nombre de mesures (échantillons) 1 (en particulier, il est inutile de définir un compteur spécifique), la valeur est de 30 (jours), par exemple, et, surtout, nous configurons le temps de répétition des événements. Pour les certificats en production, je le configure une fois par jour (86400 secondes), sinon vous pouvez vous noyer dans les alertes (ce qui, soit dit en passant, s'est produit une fois, et de plus, la boîte aux lettres était pleine le week-end). Pour le débogage, il est judicieux de définir moins, 60 secondes, par exemple.
3. Dans
Configuration de l'action, créez un modèle de message d'alerte, tel que celui-ci:

Tous ces% m,% S, etc. - macros dans lesquelles les valeurs de notre paramètre seront substituées. Ils sont décrits plus en détail dans le
manuel NetXMS.
4. Enfin, en combinant les points précédents, dans la
politique de traitement des événements, créez une règle selon laquelle une alarme sera créée et un message sera envoyé:

Nous respectons la politique, tout peut être testé. Définissez le seuil plus haut pour la vérification. Mon certificat le plus proche expire dans 723 jours, j'ai défini 724 pour vérification. Par conséquent, nous obtenons l'alarme suivante:

et une telle alerte mail:

Voilà, c'est tout. Vous pouvez, bien sûr, configurer un tableau de bord, créer des graphiques, mais pour les certificats, ce seront des lignes droites quelque peu dénuées de sens et ennuyeuses, contrairement aux graphiques de CPU ou de chargement de mémoire, par exemple. Mais, à ce sujet en quelque sorte une autre fois.