NetXMS da Windows da sertifikatning amal qilish muddatini kuzatish

Yaqinda biz Windows serverlarida sertifikatlarning amal qilish muddatini kuzatish vazifasiga duch keldik. Xo'sh, sertifikatlar bir necha marta qovoqqa aylanganidan keyin qanday turdim, ularning yangilanishi uchun mas'ul bo'lgan soqolli hamkasbi ta'tilda bo'lgan paytda. Shundan so'ng u va men nimadandir shubhalanib, bu haqda o'ylashga qaror qildik. Biz NetXMS monitoring tizimini asta-sekin joriy etayotganimiz sababli, u bu vazifani bajarish uchun asosiy va, qoida tariqasida, yagona nomzodga aylandi.

Natija nihoyat quyidagi shaklda olingan:

NetXMS da Windows da sertifikatning amal qilish muddatini kuzatish

Va jarayonning o'zi davom etadi.

Bor. NetXMS da muddati tugagan sertifikatlar uchun o'rnatilgan hisoblagich yo'q, shuning uchun siz o'zingizni yaratishingiz va uni ma'lumotlar bilan ta'minlash uchun skriptlardan foydalanishingiz kerak. Albatta, Powershell-da bu Windows. Skript operatsion tizimdagi barcha sertifikatlarni o'qishi, ularning amal qilish muddatini bir necha kun ichida olishi va bu raqamni NetXMS-ga o'tkazishi kerak. Uning agenti orqali. Bu erda biz boshlaymiz.

Bir variant, eng oddiy. Eng yaqin sana bilan sertifikatning amal qilish muddati tugagunga qadar qancha kunlar sonini olish kifoya.

NetXMS serveri bizning maxsus parametrimiz mavjudligi haqida bilishi uchun uni agentdan olishi kerak. Aks holda, bu parametr yo'qligi sababli qo'shilmaydi. Shuning uchun, agent konfiguratsiya faylida nxagentd.conf deb nomlangan tashqi parametr qatorini qo'shamiz HTTPS.CertificateExpireDateSimple, unda biz skript ishga tushirilishini ro'yxatdan o'tkazamiz:

ExternalParameter = HTTPS.CertificateExpireDateSimple: powershell.exe -File "servershareNetXMS_CertExpireDateSimple.ps1"

Skript tarmoq orqali ishga tushirilganligini hisobga olsak, siz eslab qolishingiz kerak Amalga oshirish siyosati, shuningdek, kodni yaxshiroq o'qish uchun men o'tkazib yuborgan boshqa "-NoLogo -NoProfile -NonInteractive" ni unutmang.

Natijada, agent konfiguratsiyasi quyidagicha ko'rinadi:

#
# NetXMS agent configuration file
# Created by agent installer at Thu Jun 13 11:24:43 2019
#
 
MasterServers = netxms.corp.testcompany.ru
ConfigIncludeDir = C:NetXMSetcnxagentd.conf.d
LogFile = {syslog}
FileStore = C:NetXMSvar
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 "servershareNetXMS_CertExpireDateSimple.ps1"

Shundan so'ng siz konfiguratsiyani saqlashingiz va agentni qayta ishga tushirishingiz kerak. Buni NetXMS konsolidan qilishingiz mumkin: konfiguratsiyani oching (agentning konfiguratsiya faylini tahrirlash), uni tahrirlang, Saqlash va qo'llashni bajaring, buning natijasida aslida xuddi shu narsa sodir bo'ladi. Soβ€˜ngra, umuman kutishga kuchingiz boβ€˜lmasa, konfiguratsiyani qayta oβ€˜qing (Soβ€˜rovnoma > Konfiguratsiya). Ushbu qadamlardan so'ng siz bizning shaxsiy parametrimizni qo'shishingiz kerak.

NetXMS konsolida ga o'ting Ma'lumotlarni yig'ish konfiguratsiyasi biz sertifikatlarni kuzatadigan va u erda yangi parametr yaratmoqchi bo'lgan eksperimental server (kelajakda konfiguratsiyadan so'ng uni shablonlarga o'tkazish mantiqiy). RoΚ»yxatdan HTTPS.CertificateExpireDateSimple ni tanlang, aniq nom bilan Tavsif kiriting, turini Integerga oΚ»rnating va soΚ»rovlar oraligΚ»ini sozlang. Nosozliklarni tuzatish uchun, masalan, 30 soniyani qisqartirish mantiqan to'g'ri keladi. Hammasi tayyor, hozircha yetarli.

Tekshirishingiz mumkin ... yo'q, juda erta. Endi, albatta, biz hech narsa olmaymiz. Shunchaki, ssenariy hali yozilmagan. Keling, bu kamchilikni tuzataylik. Skript shunchaki raqamni, sertifikatning amal qilish muddati tugaguniga qadar qolgan kunlar sonini ko'rsatadi. Mavjud bo'lganlarning eng minimali. Misol skript:

try {
    # ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ всС сСртификаты ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° сСртификатов
    $lmCertificates = @( Get-ChildItem -Recurse -path 'Cert:LocalMachineMy' -ErrorAction Stop )
     
    # Если сСртификатов Π½Π΅Ρ‚, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ "10 Π»Π΅Ρ‚"
    if ($lmCertificates.Count -eq 0) { return 3650 }
 
    # ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Expiration Date всСх сСртификатов
    $expirationDates = @( $lmCertificates | ForEach-Object { return $_.NotAfter } )
 
    # ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Π»ΠΈΠ·ΠΊΠΈΠΉ Expiration Date ΠΈΠ· всСх
    $minExpirationDate = ($expirationDates | Measure-Object -Minimum -ErrorAction Stop ).Minimum
 
    # ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Π»ΠΈΠ·ΠΊΠΈΠΉ Expiration Date Π² количСство ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ Π΄Π½Π΅ΠΉ с ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ΠΌ Π² ΠΌΠ΅Π½ΡŒΡˆΡƒΡŽ сторону
    $daysLeft = [Math]::Floor( ($minExpirationDate - [DateTime]::Now).TotalDays )
 
    # Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
    return $daysLeft
}
catch {
    return -1
}

Bu shunday chiqadi:

NetXMS da Windows da sertifikatning amal qilish muddatini kuzatish

Sertifikat muddati tugashiga 723 kun, deyarli ikki yil qoldi. Bu mantiqan to'g'ri, chunki men yaqinda Exchange test stoli uchun sertifikatlarni qayta chiqardim.

Bu oson variant edi. Ehtimol, kimdir bundan mamnun bo'ladi, lekin biz ko'proq narsani xohladik. Biz o'z oldimizga serverdagi barcha sertifikatlar ro'yxatini, nomi bo'yicha va sertifikatning amal qilish muddati tugaguniga qadar qolgan kunlar sonini ko'rish vazifasini qo'ydik.

Ikkinchi variant, biroz murakkabroq.

Biz yana agent konfiguratsiyasini tahrir qilamiz va u erda ExternalParameter qatori o'rniga yana ikkitasini yozamiz:

ExternalList = HTTPS.CertificateNames: powershell.exe -File "serversharenetxms_CertExternalNames.ps1"
ExternalParameter = HTTPS.CertificateExpireDate(*): powershell.exe -File "serversharenetxms_CertExternalParameter.ps1" -CertificateId "$1"

Π’ Tashqi ro'yxat biz faqat satrlar ro'yxatini olamiz. Bizning holatda, sertifikat nomlari bilan satrlar ro'yxati. Biz skript yordamida ushbu qatorlar ro'yxatini olamiz. Ro'yxat nomi - HTTPS. CertificateNames.

NetXMS_CertNames.ps1 skripti:

#Бписок Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ сСртификатов
$nameTypeList = @(
        [System.Security.Cryptography.X509Certificates.X509NameType]::SimpleName,
        [System.Security.Cryptography.X509Certificates.X509NameType]::DnsName,
        [System.Security.Cryptography.X509Certificates.X509NameType]::DnsFromAlternativeName,
        [System.Security.Cryptography.X509Certificates.X509NameType]::UrlName,
        [System.Security.Cryptography.X509Certificates.X509NameType]::EmailName,
        [System.Security.Cryptography.X509Certificates.X509NameType]::UpnName
)
 
#Π˜Ρ‰Π΅ΠΌ всС сСртификаты, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡
$certList = @( Get-ChildItem -Path 'Cert:LocalMachineMy' | Where-Object { $_.HasPrivateKey -eq $true } )
 
#ΠŸΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ списку сСртификатов, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ строку "Имя сСртификата - Π”Π°Ρ‚Π° - Thumbprint" ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π΅Ρ‘
foreach ($cert in $certList) {
    $name = '(unknown name)'
    try {
        $thumbprint = $cert.Thumbprint
        $dateExpire = $cert.NotAfter
        foreach ($nameType in $nameTypeList) {
            $name_temp = $cert.GetNameInfo( $nameType, $false)
            if ($name_temp -ne $null -and $name_temp -ne '') {
                $name = $name_temp;
                break;
            }
        }
        Write-Output "$($name) - $($dateExpire.ToString('dd.MM.yyyy')) - [T:$($thumbprint)]"
    }
    catch {
        Write-Error -Message "Error processing certificate list: $($_.Exception.Message)"
    }
}

Va allaqachon Tashqi parametr Biz ExternalList ro'yxatidan qatorlarni kiritamiz va chiqishda har biri uchun bir xil kunlar sonini olamiz. Identifikator sertifikatning bosh barmog'i hisoblanadi. Shuni yodda tutingki, HTTPS.CertificateExpireDate ushbu variantda yulduzcha (*) mavjud. Bu tashqi o'zgaruvchilarni qabul qilishi uchun zarur, faqat bizning CertificateId.

NetXMS_CertExpireDate.ps1 skripti:

#ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ входящий ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ $CertificateId
param (
    [Parameter(Mandatory=$false)]
    [String]$CertificateId
)
 
#ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° сущСствованиС
if ($CertificateId -eq $null) {
    Write-Error -Message "CertificateID parameter is required!"
    return
}
 
#По Thumbprint ΠΈΠ· строки Π² $CertificateId ΠΈΡ‰Π΅ΠΌ сСртификат ΠΈ опрСдСляСм Π΅Π³ΠΎ Expiration Date 
$certId = $CertificateId;
try {
    if ($certId -match '^.*[T:(?<Thumbprint>[A-Z0-9]+)]$') {
        $thumbprint = $Matches['Thumbprint']
        $certificatePath = "Cert:LocalMachineMy$($thumbprint)"
         
        if (Test-Path -PathType Leaf -Path $certificatePath ) {
            $certificate = Get-Item -Path $certificatePath;
            $certificateExpirationDate = $certificate.NotAfter
            $certificateDayToLive = [Math]::Floor( ($certificateExpirationDate - [DateTime]::Now).TotalDays )
            Write-Output "$($certificateDayToLive)";
        }
        else {
            Write-Error -Message "No certificate matching this thumbprint found on this server $($certId)"
        }
    }
    else {
        Write-Error -Message "CertificateID provided in wrong format. Must be FriendlyName [T:<thumbprint>]"
    }
}
catch {
    Write-Error -Message "Error while executing script: $($_.Exception.Message)"
}

Serverning ma'lumotlar yig'ish konfiguratsiyasida biz yangi parametr yaratamiz. Parametrda biz o'zimizni tanlaymiz HTTPS.CertificateExpireDate(*) ro'yxatidan va (diqqat!) yulduzchani o'zgartiring {misol}. Ushbu muhim nuqta har bir misol (sertifikat) uchun alohida hisoblagich yaratishga imkon beradi. Qolganlari oldingi versiyadagi kabi to'ldiriladi:

NetXMS da Windows da sertifikatning amal qilish muddatini kuzatish

Hisoblagichlarni yaratish uchun biror narsaga ega bo'lish uchun Instance Discovery yorlig'ida siz ro'yxatdan Agent ro'yxatini tanlashingiz kerak va Ro'yxat nomi maydoniga skriptdagi tashqi ro'yxatimizning nomini kiriting - HTTPS.CertificateNames.

Deyarli tayyor, biroz kuting yoki kutishning mutlaqo imkoni boΚ»lmasa, SoΚ»rovnoma > Konfiguratsiya va SoΚ»rovnoma > Namuna kashfiyotini majburlang. Natijada, biz barcha sertifikatlarimizni amal qilish muddati bilan olamiz:

NetXMS da Windows da sertifikatning amal qilish muddatini kuzatish

Sizga nima kerak? Xo'sh, ha, faqat perfektsionizm qurti hisoblagich nomidagi bu keraksiz Bosh barmoq iziga g'amgin ko'zlari bilan qaraydi va maqolani tugatishimga imkon bermaydi. Uni ta'minlash uchun hisoblagich xususiyatlarini qayta oching va Instance Discovery yorlig'ida "Instance Discovery filter skript" maydonida yozilganini qo'shing. NXSL (NetXMS ichki tili) skripti:

instance = $1;
 if (instance ~= "^(.*)s-s[T:[a-zA-Z0-9]+]$")
 {
 return %(true, instance, $1);
 }
 return true;

Bosh barmoq izini filtrlaydigan:

NetXMS da Windows da sertifikatning amal qilish muddatini kuzatish

Va uni filtrlangan holda ko'rsatish uchun Tavsif maydonidagi Umumiy yorlig'ida CertificateExpireDate: {instance} ni o'zgartiring. CertificateExpireDate: {instance-name}:

NetXMS da Windows da sertifikatning amal qilish muddatini kuzatish

Va nihoyat, KDPV marrasi:

NetXMS da Windows da sertifikatning amal qilish muddatini kuzatish

Bu go'zallik emasmi?

Sertifikat muddati tugagach, ular elektron pochta orqali kelishi uchun ogohlantirishlarni sozlash qoladi.

1. Avval hisoblagich qiymati biz o'rnatgan ba'zi chegaraga tushganda uni faollashtirish uchun Voqealar shablonini yaratishimiz kerak. IN Hodisa konfiguratsiyasi kabi nomlar bilan ikkita yangi shablon yarataylik CertificateExpireDate_threshold_activate Ogohlantirish holati bilan:

NetXMS da Windows da sertifikatning amal qilish muddatini kuzatish

va shunga o'xshash CertificateExpireDate_threshold_O'chirish Oddiy holat bilan.

2. Keyin, hisoblagich xususiyatlariga o'ting va Eshiklar ko'rinishida chegarani o'rnating:

NetXMS da Windows da sertifikatning amal qilish muddatini kuzatish

bu erda biz yaratilgan voqealarimizni tanlaymiz CertificateExpireDate_Threshold_Activate va CertificateExpireDate_Threshold_Deactivate, namunalar sonini (Namunalar) 1 ga qo'ying (ayniqsa, bu hisoblagich uchun ko'proq o'rnatishning ma'nosi yo'q), qiymat 30 (kun), masalan, va muhimi, o'rnatish hodisaning takrorlanish vaqti. Ishlab chiqarishdagi sertifikatlar uchun men uni kuniga bir marta (86400 soniya) o'rnatdim, aks holda siz bildirishnomalarga g'arq bo'lishingiz mumkin (aytmoqchi, bu bir marta sodir bo'lgan, shuning uchun pochta qutisi dam olish kunlari to'lgan edi). Nosozliklarni tuzatish vaqti uchun uni, masalan, 60 soniyadan pastroq qilib qo'yish mantiqan.

3. In Harakat konfiguratsiyasi quyidagi kabi bildirishnoma xati shablonini yarating:

NetXMS da Windows da sertifikatning amal qilish muddatini kuzatish

Bularning barchasi %m, %S va boshqalar. β€” parametrimizdagi qiymatlar almashtiriladigan makroslar. Ular maqolada batafsil tavsiflangan qo'llanma NetXMS.

4. Va nihoyat, oldingi fikrlarni birlashtirib, ichiga Voqealarni qayta ishlash siyosati Qoida yarating, unga ko'ra Signal yaratiladi va xat yuboriladi:

NetXMS da Windows da sertifikatning amal qilish muddatini kuzatish

Biz siyosatni saqlaymiz, hamma narsani sinab ko'rish mumkin. Tekshirish uchun chegarani yuqoriroq qilib belgilaymiz. Mening eng yaqin sertifikatimning amal qilish muddati 723 kundan keyin tugaydi, tekshirish uchun uni 724 ga qoΚ»ydim. Natijada biz quyidagi signalni olamiz:

NetXMS da Windows da sertifikatning amal qilish muddatini kuzatish

va ushbu elektron pochta xabarnomasi:

NetXMS da Windows da sertifikatning amal qilish muddatini kuzatish

Hozir hammasi aniq. Albatta, asboblar panelini o'rnatish va grafiklarni yaratish mumkin edi, lekin sertifikatlar uchun bu, masalan, protsessor yoki xotira yuki grafiklaridan farqli o'laroq, ma'nosiz va zerikarli to'g'ri chiziqlar bo'ladi. Ammo, bu haqda boshqa vaqt.

Manba: www.habr.com

a Izoh qo'shish