Pag-monitor sa petsa sa pag-expire sa sertipiko sa Windows sa NetXMS

Bag-ohay lang nag-atubang kami sa tahas sa pagmonitor sa panahon sa balido sa mga sertipiko sa mga server sa Windows. Aw, giunsa nako pagbangon human ang mga sertipiko nahimong kalabasa sa makadaghang higayon, sa panahon nga ang kauban nga bungot nga responsable sa ilang pagbag-o nagbakasyon. Human niana, siya ug ako nagduda ug usa ka butang ug nakahukom nga hunahunaon kini. Tungod kay hinay-hinay namong gipatuman ang sistema sa pag-monitor sa NetXMS, nahimo kini nga panguna ug, sa prinsipyo, ang bugtong kandidato alang niini nga buluhaton.

Ang resulta sa katapusan nakuha sa mosunod nga porma:

Pag-monitor sa petsa sa pag-expire sa sertipiko sa Windows sa NetXMS

Ug ang proseso mismo nagpadayon.

Lakaw. Walay built-in nga counter para sa nag-expire nga mga sertipiko sa NetXMS, mao nga kinahanglan ka nga maghimo og imong kaugalingon ug mogamit og mga script aron mahatagan kini og datos. Siyempre, sa Powershell, kini ang Windows. Kinahanglang basahon sa script ang tanan nga mga sertipiko sa operating system, kuhaa ang ilang expiration date sa mga adlaw gikan didto ug ipasa kini nga numero sa NetXMS. Pinaagi sa iyang ahente. Didto na ta magsugod.

Usa nga Pagpili, pinakasimple. Kuhaa lang ang gidaghanon sa mga adlaw hangtod sa expiration date sa sertipiko nga adunay labing duol nga petsa.

Aron mahibal-an sa NetXMS server ang bahin sa pagkaanaa sa among naandan nga parameter, kinahanglan kini makadawat gikan sa ahente. Kung dili, kini nga parameter dili madugang tungod sa pagkawala niini. Busa, sa ahente configuration file nxagentd.conf gidugang namo ang usa ka eksternal nga parameter string nga gitawag HTTPS.CertificateExpireDateSimple, diin among girehistro ang paglunsad sa script:

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

Gikonsiderar nga ang script gilunsad sa network, kinahanglan nimong hinumdoman ang bahin Patakaran sa Pagpatuman, ug ayaw usab kalimti ang uban nga "-NoLogo -NoProfile -NonInteractive", nga akong gilaktawan para sa mas maayong pagkabasa sa code.

Ingon usa ka sangputanan, ang config sa ahente ingon niini:

#
# 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"

Pagkahuman niini, kinahanglan nimo nga i-save ang config ug i-restart ang ahente. Mahimo nimo kini gikan sa NetXMS console: ablihi ang config (I-edit ang configuration file sa ahente), i-edit kini, i-execute ang Save&Apply, isip resulta niini, sa pagkatinuod, ang sama nga butang mahitabo. Dayon basaha pag-usab ang configuration (Poll> Configuration), kung wala ka'y ​​kusog sa paghulat. Pagkahuman niini nga mga lakang, mahimo nimong idugang ang among naandan nga parameter.

Sa NetXMS console adto sa Konfigurasyon sa Pagkolekta sa Data eksperimento nga server diin among bantayan ang mga sertipiko ug maghimo usa ka bag-ong parameter didto (sa umaabot, pagkahuman sa pag-configure, makatarunganon nga ibalhin kini sa mga template). Pilia ang HTTPS.CertificateExpireDateSimple gikan sa lista, pagsulod sa Deskripsyon nga adunay klaro nga ngalan, ibutang ang tipo sa Integer ug i-configure ang interval sa pagboto. Alang sa mga katuyoan sa pag-debug, makatarunganon nga himoon kini nga mas mubo, 30 segundos, pananglitan. Andam na ang tanan, igo na kana sa pagkakaron.

Mahimo nimong susihon ... dili, sayo pa kaayo. Karon, siyempre, wala kami makakuha bisan unsa. Tungod lang kay wala pa masulat ang script. Atong tul-iron kini nga pagkawala. Ang script mopakita lang ug numero, ang gidaghanon sa mga adlaw nga nahabilin hangtod ma-expire ang sertipiko. Ang labing gamay sa tanan nga magamit. Pananglitan nga script:

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
}

Kini nahimong sama niini:

Pag-monitor sa petsa sa pag-expire sa sertipiko sa Windows sa NetXMS

723 ka adlaw, hapit duha ka tuig ang nahabilin hangtod ma-expire ang sertipiko. Makataronganon kini, tungod kay nag-isyu usab ako og mga sertipiko alang sa Exchange test bench bag-o lang.

Kini usa ka sayon ​​nga kapilian. Tingali, adunay matagbaw niini, apan gusto namon ang labi pa. Gibutang namo ang among kaugalingon sa tahas sa pagkuha og listahan sa tanang mga sertipiko sa server, pinaagi sa ngalan, ug aron makita sa matag usa ang gidaghanon sa mga adlaw nga nahibilin hangtud nga ang sertipiko ma-expire.

Ang ikaduha nga kapilian, medyo mas komplikado.

Pag-usab among gi-edit ang config sa ahente ug didto, imbis nga linya nga adunay ExternalParameter, nagsulat kami duha pa:

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

Π’ External List nakakuha lang kami usa ka lista sa mga kuwerdas. Sa among kaso, usa ka lista sa mga string nga adunay mga ngalan sa sertipiko. Makadawat kami og lista niini nga mga linya gamit ang script. Ngalan sa listahan - HTTPS.CertificateNames.

Script NetXMS_CertNames.ps1:

#Бписок Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ сСртификатов
$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)"
    }
}

Ug naa na ExternalParameter Gisulod namo ang mga laray gikan sa listahan sa ExternalList, ug sa output makuha namo ang samang gidaghanon sa mga adlaw alang sa matag usa. Ang identifier mao ang Thumbprint sa sertipiko. Timan-i nga ang HTTPS.CertificateExpireDate adunay asterisk (*) niini nga variant. Kini gikinahanglan aron kini modawat sa mga external variable, ang among CertificateId lang.

Script NetXMS_CertExpireDate.ps1:

#ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ входящий ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ $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)"
}

Sa Data Collection Configuration sa server, naghimo kami og bag-ong parameter. Sa Parameter atong pilion ang atong HTTPS.CertificateExpireDate(*) gikan sa listahan, ug (atensyon!) usba ang asterisk sa {instance}. Kining importante nga punto magtugot kanimo sa paghimo og bulag nga counter para sa matag higayon (sertipiko). Ang uban gipuno sama sa miaging bersyon:

Pag-monitor sa petsa sa pag-expire sa sertipiko sa Windows sa NetXMS

Aron adunay usa ka butang nga makamugna og mga counter, sa Instance Discovery tab kinahanglan nimo nga pilion ang Agent List gikan sa lista ug sa List Name field isulod ang ngalan sa among ExternalList gikan sa script - HTTPS.CertificateNames.

Hapit na andam, paghulat gamay o pugsa ang Poll > Configuration ug Poll > Instance Discovery kung hingpit nga imposible ang paghulat. Ingon usa ka sangputanan, makuha namon ang tanan namon nga mga sertipiko nga adunay mga panahon sa pagkabalido:

Pag-monitor sa petsa sa pag-expire sa sertipiko sa Windows sa NetXMS

Unsa imong kinahanglan? Aw, oo, ang ulod lamang sa perpeksiyonismo nagtan-aw niining wala kinahanglana nga Thumbprint sa ngalan sa counter nga adunay masulub-on nga mga mata ug wala ako tugoti nga tapuson ang artikulo. Aron pakan-on kini, ablihi pag-usab ang counter properties ug sa tab nga Instance Discovery, sa field nga "Instance discovery filter script", idugang ang gisulat sa NXSL (NetXMS internal nga pinulongan) script:

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

nga magsala sa Thumbprint:

Pag-monitor sa petsa sa pag-expire sa sertipiko sa Windows sa NetXMS

Ug aron ipakita kini nga nasala, sa General tab sa Deskripsyon nga field, usba ang CertificateExpireDate: {instance} ngadto sa CertificateExpireDate: {instance-name}:

Pag-monitor sa petsa sa pag-expire sa sertipiko sa Windows sa NetXMS

Mao na, sa katapusan ang finish line gikan sa KDPV:

Pag-monitor sa petsa sa pag-expire sa sertipiko sa Windows sa NetXMS

Dili ba kini kaanyag?

Ang nahabilin mao ang pag-set up sa mga alerto aron sila moabut pinaagi sa email kung matapos na ang sertipiko.

1. Una kinahanglan namong maghimo ug Event Template aron ma-activate kini kung ang counter value mukunhod ngadto sa pipila ka threshold nga among gitakda. SA Pag-configure sa Hitabo maghimo ta ug duha ka bag-ong templates nga naay mga ngalan sama sa CertificateExpireDate_Threshold_Activate nga adunay kahimtang sa pasidaan:

Pag-monitor sa petsa sa pag-expire sa sertipiko sa Windows sa NetXMS

ug susama CertificateExpireDate_Threshold_Deactivate nga adunay Normal nga kahimtang.

2. Sunod, adto sa counter properties ug ibutang ang threshold sa Tresholds tab:

Pag-monitor sa petsa sa pag-expire sa sertipiko sa Windows sa NetXMS

diin atong pilion ang atong gibuhat nga mga panghitabo CertificateExpireDate_Threshold_Activate ug CertificateExpireDate_Threshold_Deactivate, ibutang ang gidaghanon sa mga sample (Samples) ngadto sa 1 (ilabi na alang niini nga counter walay punto sa pagtakda og dugang), ang bili mao ang 30 (mga adlaw), pananglitan, ug, importante, set ang panahon sa pagbalik-balik sa panghitabo. Alang sa mga sertipiko sa produksiyon, gitakda nako kini kausa sa usa ka adlaw (86400 segundos), kung dili mahimo ka malumos sa mga pahibalo (nga, sa tinuud, nahitabo kausa, mao nga ang mailbox puno sa katapusan sa semana). Alang sa oras sa pag-debug, makatarunganon nga ibutang kini nga mas ubos, 60 segundos, pananglitan.

3. Sa Pag-configure sa Aksyon paghimo og template sa sulat sa pagpahibalo, sama niini:

Pag-monitor sa petsa sa pag-expire sa sertipiko sa Windows sa NetXMS

Kining tanan nga %m, %S, etc. - mga macro diin ang mga kantidad gikan sa among parameter ilisan. Sila gihulagway sa mas detalyado sa manwal NetXMS.

4. Ug sa katapusan, paghiusa sa miaging mga punto, ngadto sa Patakaran sa Pagproseso sa Hitabo paghimo og usa ka lagda sumala sa paghimo sa usa ka Alarm ug usa ka sulat ipadala:

Pag-monitor sa petsa sa pag-expire sa sertipiko sa Windows sa NetXMS

Gitipigan namon ang palisiya, ang tanan mahimong masulayan. Atong ibutang ang threshold nga mas taas aron masusi. Ang akong labing duol nga sertipiko matapos sa 723 ka adlaw, akong gibutang kini sa 724 aron masusi. Ingon usa ka sangputanan, makuha namon ang mosunod nga alarma:

Pag-monitor sa petsa sa pag-expire sa sertipiko sa Windows sa NetXMS

ug kini nga pahibalo sa email:

Pag-monitor sa petsa sa pag-expire sa sertipiko sa Windows sa NetXMS

Mao na gyud na karon. Mahimong posible, siyempre, ang pag-set up sa usa ka dashboard ug paghimo og mga graph, apan alang sa mga sertipiko kini medyo wala’y kahulogan ug makalaay nga tul-id nga mga linya, dili sama sa mga graph sa processor o memory load, pananglitan. Apan, dugang pa bahin niini sa laing higayon.

Source: www.habr.com

Idugang sa usa ka comment