Monitoraġġ tad-data tal-iskadenza taċ-ċertifikat fil-Windows fuq NetXMS

Riċentement konna ffaċċjati bil-kompitu li nissorveljaw il-perjodu ta 'validità taċ-ċertifikati fuq servers tal-Windows. Ukoll, kif qomt wara li ċ-ċertifikati nbidlu f'qargħa diversi drabi, fl-istess ħin meta l-kollega tad-daqna responsabbli għat-tiġdid tagħhom kien fuq vaganza. Wara dan, jien u hu ssuspettajna xi ħaġa u ddeċidejna li naħsbu dwarha. Peress li bil-mod qed nimplimentaw is-sistema ta 'monitoraġġ NetXMS, saret il-kandidat ewlieni u, fil-prinċipju, l-uniku kandidat għal dan il-kompitu.

Ir-riżultat finalment inkiseb fil-forma li ġejja:

Monitoraġġ tad-data tal-iskadenza taċ-ċertifikat fil-Windows fuq NetXMS

U l-proċess innifsu jkompli.

Mur. M'hemm l-ebda counter integrat għal ċertifikati li jiskadu f'NetXMS, għalhekk għandek bżonn toħloq tiegħek u tuża skripts biex tipprovdiha bid-dejta. Naturalment, fuq Powershell, dan huwa Windows. L-iskritt għandu jaqra ċ-ċertifikati kollha fis-sistema operattiva, jieħu d-data tal-iskadenza tagħhom f'jiem minn hemm u jgħaddi dan in-numru lil NetXMS. Permezz tal-aġent tiegħu. Hemmhekk se nibdew.

Għażla waħda, l-aktar sempliċi. Sempliċement ikseb in-numru ta 'jiem sad-data ta' skadenza taċ-ċertifikat bl-eqreb data.

Biex is-server NetXMS ikun jaf dwar l-eżistenza tal-parametru tad-dwana tagħna, irid jirċievih mingħand l-aġent. Inkella, dan il-parametru ma jistax jiġi miżjud minħabba n-nuqqas tiegħu. Għalhekk, fil-fajl tal-konfigurazzjoni tal-aġent nxagentd.conf aħna żid string parametru estern imsejħa HTTPS.CertificateExpireDateSimple, li fih nirreġistraw it-tnedija tal-iskrittura:

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

Meta wieħed iqis li l-iskrittura hija mnedija fuq in-netwerk, trid tiftakar dwar Politika ta' Eżekuzzjoni, u wkoll ma ninsewx l-oħra "-NoLogo -NoProfile -NonInteractive", li ħallejt barra għal kodiċi aħjar li jinqara.

Bħala riżultat, il-konfigurazzjoni tal-aġent tidher xi ħaġa bħal din:

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

Wara dan, għandek bżonn issalva l-konfigurazzjoni u terġa 'tibda l-aġent. Tista 'tagħmel dan mill-console NetXMS: tiftaħ il-konfigurazzjoni (Editja l-fajl tal-konfigurazzjoni tal-aġent), editjaha, tesegwixxi Save&Apply, b'riżultat li, fil-fatt, se jiġri l-istess ħaġa. Imbagħad erġa' aqra l-konfigurazzjoni (Poll > Konfigurazzjoni), jekk ma jkollokx is-saħħa li tistenna xejn. Wara dawn il-passi, għandek tkun tista 'żżid il-parametru tad-dwana tagħna.

Fil-console NetXMS mur Konfigurazzjoni tal-Ġbir tad-Data server sperimentali li fuqu se nissorveljaw iċ-ċertifikati u noħolqu parametru ġdid hemmhekk (fil-futur, wara l-konfigurazzjoni, jagħmel sens li tittrasferih għal mudelli). Agħżel HTTPS.CertificateExpireDateSimple mil-lista, daħħal Deskrizzjoni b'isem ċar, issettja t-tip għal Integer u kkonfigura l-intervall tal-votazzjoni. Għal skopijiet ta 'debugging, jagħmel sens li tagħmilha iqsar, 30 sekonda, pereżempju. Kollox lest, dan huwa biżżejjed għalissa.

Tista’ tiċċekkja... le, għadu kmieni wisq. Issa, ovvjament, ma nġibu xejn. Sempliċement għax l-iskript għadu ma nkitebx. Ejja nikkoreġu din l-ommissjoni. L-iskrittura se sempliċement turi numru, in-numru ta 'jiem li fadal sakemm jiskadi ċ-ċertifikat. L-aktar minimu ta 'kollha disponibbli. Eżempju ta' 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
}

Jirriżulta hekk:

Monitoraġġ tad-data tal-iskadenza taċ-ċertifikat fil-Windows fuq NetXMS

723 jum, fadal kważi sentejn sakemm jiskadi ċ-ċertifikat. Huwa loġiku, għaliex erġajt ħriġt ċertifikati għall-bank tat-test tal-Iskambju pjuttost reċentement.

Kienet għażla faċli. Probabbilment, xi ħadd se jkun sodisfatt b'dan, imma ridna aktar. Aħna stabbilixxew lilna nfusna l-kompitu li niksbu lista taċ-ċertifikati kollha fuq is-server, bl-isem, u biex kull wieħed jara n-numru ta 'jiem li fadal sakemm jiskadi ċ-ċertifikat.

It-tieni għażla, kemmxejn aktar ikkumplikat.

Għal darb'oħra neditjaw il-konfigurazzjoni tal-aġent u hemm, minflok il-linja b'ExternalParameter, niktbu tnejn oħra:

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

В Lista Esterna aħna biss tikseb lista ta 'kordi. Fil-każ tagħna, lista ta 'kordi bl-ismijiet taċ-ċertifikati. Aħna se nirċievu lista ta 'dawn il-linji billi tuża l-iskrittura. Isem tal-lista - 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)"
    }
}

U diġà ġewwa ExternalParameter Aħna ndaħħlu ringieli mil-lista ExternalList, u fl-output nikseb l-istess numru ta 'jiem għal kull wieħed. L-identifikatur huwa l-Thumbprint taċ-ċertifikat. Innota li HTTPS.CertificateExpireDate fih asterisk (*) f'dan il-varjant. Dan huwa meħtieġ sabiex jaċċetta varjabbli esterni, iċ-ĊertifikatId tagħna biss.

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)"
}

Fil-Konfigurazzjoni tal-Ġbir tad-Data tas-server, noħolqu parametru ġdid. Fil-Parametru aħna nagħżlu tagħna HTTPS.CertificateExpireDate(*) mil-lista, u (attenzjoni!) Ibdel l-asterisk għal {istanza}. Dan il-punt importanti jippermettilek li toħloq counter separat għal kull istanza (ċertifikat). Il-bqija jimtela bħal fil-verżjoni preċedenti:

Monitoraġġ tad-data tal-iskadenza taċ-ċertifikat fil-Windows fuq NetXMS

Sabiex ikollok xi ħaġa minn fejn toħloq counters, fuq it-tab Instance Discovery trid tagħżel Lista tal-Aġenti mil-lista u fil-qasam Isem tal-Lista daħħal l-isem tal-ExternalList tagħna mill-iskript - HTTPS.CertificateNames.

Kważi lest, stenna ftit jew iġġiegħel Poll > Konfigurazzjoni u Poll > Instance Discovery jekk ikun kompletament impossibbli li tistenna. Bħala riżultat, aħna niksbu ċ-ċertifikati kollha tagħna b'perjodi ta 'validità:

Monitoraġġ tad-data tal-iskadenza taċ-ċertifikat fil-Windows fuq NetXMS

X'għandek bżonn? Ukoll, iva, id-dud tal-perfezzjoniżmu biss iħares lejn din it-Thumbprint bla bżonn f'isem il-counter b'għajnejn imdejqa u ma tħallinix nispiċċa l-artiklu. Biex tmigħha, iftaħ mill-ġdid il-proprjetajiet tal-counter u fit-tab Instance Discovery, fil-qasam "Instance discovery filter script", żid dik miktuba fi NXSL (lingwa interna NetXMS) skript:

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

li se tiffiltra Thumbprint:

Monitoraġġ tad-data tal-iskadenza taċ-ċertifikat fil-Windows fuq NetXMS

U biex turiha ffiltrata, fit-tab Ġenerali fil-qasam Deskrizzjoni, ibdel CertificateExpireDate: {istanza} għal CertificateExpireDate: {isem-istanza}:

Monitoraġġ tad-data tal-iskadenza taċ-ċertifikat fil-Windows fuq NetXMS

Dak hu, finalment il-linja tal-finitura minn KDPV:

Monitoraġġ tad-data tal-iskadenza taċ-ċertifikat fil-Windows fuq NetXMS

Mhux sbuħija?

Jibqa' biss li jiġu stabbiliti twissijiet biex jaslu bl-email meta jiskadi ċ-ċertifikat.

1. L-ewwel irridu noħolqu Template ta 'Avveniment biex nattivawh meta l-valur tal-kontro jonqos għal xi limitu li waqqafna. IN Konfigurazzjoni ta' Avveniment ejja noħolqu żewġ mudelli ġodda b'ismijiet bħal CertificateExpireDate_Threshold_Activate bi status ta' Twissija:

Monitoraġġ tad-data tal-iskadenza taċ-ċertifikat fil-Windows fuq NetXMS

u simili CertificateExpireDate_Threshold_Deactivate bi status normali.

2. Sussegwentement, mur fil-proprjetajiet tal-counter u waqqaf il-limitu fuq it-tab Tresholds:

Monitoraġġ tad-data tal-iskadenza taċ-ċertifikat fil-Windows fuq NetXMS

fejn nagħżlu l-avvenimenti maħluqa tagħna CertificateExpireDate_Threshold_Activate u CertificateExpireDate_Threshold_Deactivate, issettja n-numru ta 'kampjuni (Kampjuni) għal 1 (speċifikament għal dan il-counter m'hemm l-ebda punt li tissettja aktar), il-valur huwa 30 (jiem), per eżempju, u, importanti, issettja il-ħin tar-ripetizzjoni tal-avveniment. Għaċ-ċertifikati fil-produzzjoni, nissettjaha darba kuljum (86400 sekondi), inkella tista 'tegħreq fin-notifiki (li, bil-mod, ġara darba, tant li l-kaxxa postali kienet mimlija fi tmiem il-ġimgħa). Għall-ħin tad-debugging, jagħmel sens li jiġi stabbilit aktar baxx, 60 sekonda, per eżempju.

3. Fi Konfigurazzjoni ta' Azzjoni oħloq mudell ta' ittra ta' notifika, bħal dan:

Monitoraġġ tad-data tal-iskadenza taċ-ċertifikat fil-Windows fuq NetXMS

Dawn kollha %m, %S, eċċ. — macros li fihom ser jiġu sostitwiti l-valuri mill-parametru tagħna. Huma deskritti f'aktar dettall fi manwal NetXMS.

4. U fl-aħħarnett, tgħaqqad il-punti preċedenti, fis Politika dwar l-Ipproċessar ta' Avvenimenti oħloq regola li skontha jinħoloq Allarm u tintbagħat ittra:

Monitoraġġ tad-data tal-iskadenza taċ-ċertifikat fil-Windows fuq NetXMS

Aħna niffrankaw il-politika, kollox jista 'jiġi ttestjat. Ejja nissettjaw il-limitu ogħla biex niċċekkjaw. L-eqreb ċertifikat tiegħi jiskadi fi żmien 723 jum, nissettjah għal 724 biex niċċekkja. Bħala riżultat, aħna jkollna l-allarm li ġej:

Monitoraġġ tad-data tal-iskadenza taċ-ċertifikat fil-Windows fuq NetXMS

u din in-notifika bl-email:

Monitoraġġ tad-data tal-iskadenza taċ-ċertifikat fil-Windows fuq NetXMS

Dak kollox żgur issa. Ikun possibbli, ovvjament, li jitwaqqaf dashboard u jinbnew graphs, iżda għaċ-ċertifikati dawn ikunu linji dritti kemmxejn bla sens u boring, b'differenza graphs ta 'proċessur jew tagħbija tal-memorja, per eżempju. Iżda, aktar dwar dan xi żmien ieħor.

Sors: www.habr.com

Żid kumment