Vöktun á gildistíma vottorðs í Windows á NetXMS

Nýlega stóðum við frammi fyrir því verkefni að fylgjast með gildistíma skírteina á Windows netþjónum. Jæja, hvernig ég stóð upp eftir að skírteinin breyttust í grasker nokkrum sinnum, einmitt á þeim tíma þegar skeggjaði samstarfsmaðurinn sem ber ábyrgð á endurnýjun þeirra var í fríi. Eftir það grunaði mig og hann eitthvað og ákváðum að hugsa málið. Þar sem við erum hægt og rólega að innleiða NetXMS eftirlitskerfið er það orðið aðal og í grundvallaratriðum eini umsækjandinn í þetta verkefni.

Niðurstaðan fékkst að lokum í eftirfarandi formi:

Vöktun á gildistíma vottorðs í Windows á NetXMS

Og ferlið sjálft heldur áfram.

Farðu. Það er enginn innbyggður teljari fyrir vottorð sem renna út í NetXMS, svo þú þarft að búa til þína eigin og nota forskriftir til að útvega þeim gögn. Auðvitað, á Powershell, er þetta Windows. Handritið ætti að lesa öll skírteini í stýrikerfinu, taka gildistíma þeirra í dögum þaðan og senda þetta númer til NetXMS. Í gegnum umboðsmann sinn. Það er þar sem við byrjum.

Valkostur One, einfaldast. Fáðu einfaldlega fjölda daga fram að gildistíma skírteinisins með næstu dagsetningu.

Til þess að NetXMS þjónninn viti um tilvist sérsniðinnar breytu okkar verður hann að fá hana frá umboðsmanni. Annars er ekki hægt að bæta þessari færibreytu við vegna þess að hún er ekki til. Þess vegna, í umboðsstillingarskránni nxagentd.conf við bætum við ytri færibreytustreng sem heitir HTTPS.CertificateExpireDateSimple, þar sem við skráum upphaf handritsins:

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

Miðað við að handritið er hleypt af stokkunum á netinu þarftu að muna um Framkvæmdarstefna, og einnig má ekki gleyma hinu „-NoLogo -NoProfile -NonInteractive“, sem ég sleppti til að lesa betur kóðann.

Fyrir vikið lítur umboðsmannsstillingin eitthvað svona út:

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

Eftir þetta þarftu að vista stillinguna og endurræsa umboðsmanninn. Þú getur gert þetta frá NetXMS stjórnborðinu: opnaðu stillinguna (Breyta stillingarskrá umboðsmannsins), breyttu henni, keyrðu Save&Apply, sem leiðir af því að það sama mun gerast. Lestu síðan stillingarnar aftur (Könnun > Stillingar), ef þú hefur alls ekki styrk til að bíða. Eftir þessi skref ættir þú að geta bætt við sérsniðnu færibreytunni okkar.

Í NetXMS stjórnborðinu farðu til Uppsetning gagnasöfnunar tilraunaþjónn sem við ætlum að fylgjast með vottorðum á og búa til nýja breytu þar (í framtíðinni, eftir uppsetningu, er skynsamlegt að flytja það yfir á sniðmát). Veldu HTTPS.CertificateExpireDateSimple af listanum, sláðu inn lýsingu með skýru nafni, stilltu tegundina á Heiltala og stilltu könnunarbilið. Í villuleitarskyni er skynsamlegt að gera það styttra, til dæmis 30 sekúndur. Allt er tilbúið, það er nóg í bili.

Þú getur athugað... nei, það er of snemmt. Nú fáum við auðvitað ekki neitt. Einfaldlega vegna þess að handritið hefur ekki enn verið skrifað. Við skulum leiðrétta þennan vanskil. Handritið mun einfaldlega sýna tölu, fjölda daga sem eftir eru þar til vottorðið rennur út. Það minnsta af öllu sem til er. Dæmi handrit:

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
}

Það kemur í ljós svona:

Vöktun á gildistíma vottorðs í Windows á NetXMS

723 dagar, tæp tvö ár eftir þar til skírteinið rennur út. Það er rökrétt, vegna þess að ég gaf út aftur skírteini fyrir Exchange prófbekkinn alveg nýlega.

Það var auðveldur kostur. Sennilega verður einhver sáttur við þetta, en við vildum meira. Við settum okkur það verkefni að fá lista yfir öll vottorð á þjóninum, með nafni, og fyrir hvert og eitt til að sjá fjölda daga sem eftir eru þar til vottorðið rennur út.

The second valkostur, nokkuð flóknara.

Aftur breytum við umboðsstillingunni og þar, í stað línunnar með ExternalParameter, skrifum við tvær aðrar:

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

В Ytri listi við fáum bara lista yfir strengi. Í okkar tilviki, listi yfir strengi með vottorðsnöfnum. Við munum fá lista yfir þessar línur með handritinu. Nafn lista - HTTPS.CertificateNames.

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

Og þegar inn YtriParameter Við setjum inn línur úr ExternalList listanum og við úttakið fáum við sama fjölda daga fyrir hverja. Auðkennið er þumalfingur á vottorðinu. Athugaðu að HTTPS.CertificateExpireDate inniheldur stjörnu (*) í þessu afbrigði. Þetta er nauðsynlegt svo það samþykki ytri breytur, bara vottorðaauðkennið okkar.

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

Í gagnasöfnunarstillingu þjónsins búum við til nýja færibreytu. Í Parameter veljum við okkar HTTPS.CertificateExpireDate(*) af listanum og (athugið!) breyttu stjörnunni í {tilvik}. Þetta mikilvæga atriði gerir þér kleift að búa til sérstakan teljara fyrir hvert tilvik (vottorð). Restin er fyllt út eins og í fyrri útgáfu:

Vöktun á gildistíma vottorðs í Windows á NetXMS

Til þess að hafa eitthvað til að búa til teljara úr, á Tilviksuppgötvun flipanum þarftu að velja Agent List af listanum og í List Name reitnum sláðu inn nafnið á ExternalList okkar úr handritinu - HTTPS.CertificateNames.

Næstum tilbúið, bíddu aðeins eða þvingaðu fram Poll > Configuration and Poll > Instance Discovery ef það er algjörlega ómögulegt að bíða. Fyrir vikið fáum við öll skírteini okkar með gildistíma:

Vöktun á gildistíma vottorðs í Windows á NetXMS

Hvað vantar þig? Jæja, já, aðeins ormur fullkomnunaráráttunnar horfir á þetta óþarfa Þumalputt í nafni teljarans sorgmæddum augum og lætur mig ekki klára greinina. Til að fæða það skaltu opna teljaraeiginleikana aftur og á Tilviksuppgötvun flipanum, í reitnum „Tilviksuppgötvunarsíuforskrift“, bætið því við sem skrifað er í NXSL (NetXMS innra tungumál) forskrift:

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

sem mun sía Thumbprint:

Vöktun á gildistíma vottorðs í Windows á NetXMS

Og til að birta það síað, á Almennt flipanum í Lýsingarreitnum, breyttu CertificateExpireDate: {tilvik} í CertificateExpireDate: {instance-name}:

Vöktun á gildistíma vottorðs í Windows á NetXMS

Það er komið, loksins endamarkið frá KDPV:

Vöktun á gildistíma vottorðs í Windows á NetXMS

Er það ekki fegurð?

Það eina sem er eftir er að setja upp viðvaranir þannig að þær berist með tölvupósti þegar vottorðið rennur út.

1. Fyrst þurfum við að búa til atburðarsniðmát til að virkja það þegar teljaragildið lækkar niður í einhvern þröskuld sem við setjum. IN Viðburðarstillingar búum til tvö ný sniðmát með nöfnum eins og CertificateExpireDate_Threshold_Activate með viðvörunarstöðu:

Vöktun á gildistíma vottorðs í Windows á NetXMS

og svipað CertificateExpireDate_Threshold_Deactivate með eðlilega stöðu.

2. Næst skaltu fara í teljaraeiginleikana og stilla þröskuldinn á Tresholds flipanum:

Vöktun á gildistíma vottorðs í Windows á NetXMS

þar sem við veljum tilbúna atburðina CertificateExpireDate_Threshold_Activate og CertificateExpireDate_Threshold_Deactivate, stillum fjölda sýna (sýnishorn) á 1 (sérstaklega fyrir þennan teljara er ekkert mál að setja fleiri), gildið er 30 (dagar), til dæmis, og, mikilvægara, stillt endurtekningartíma viðburðarins. Fyrir skírteini í framleiðslu stillti ég það einu sinni á dag (86400 sekúndur), annars geturðu drukknað í tilkynningum (sem gerðist einu sinni, svo mikið að pósthólfið var fullt um helgina). Fyrir villuleitartíma er skynsamlegt að stilla hann lægri, 60 sekúndur, til dæmis.

3. Í Aðgerðarstillingar búðu til sniðmát fyrir tilkynningarbréf, svona:

Vöktun á gildistíma vottorðs í Windows á NetXMS

Öll þessi %m, %S o.s.frv. - Fjölvi þar sem gildum úr stikunni okkar verður skipt út í. Þeim er lýst nánar í handbók NetXMS.

4. Og að lokum, að sameina fyrri atriði, í Vinnslustefna viðburða búðu til reglu þar sem viðvörun verður búin til og bréf verður sent:

Vöktun á gildistíma vottorðs í Windows á NetXMS

Við vistum stefnuna, allt er hægt að prófa. Við skulum setja þröskuldinn hærra til að athuga. Næsta vottorð mitt rennur út eftir 723 daga, ég stillti það á 724 til að athuga. Fyrir vikið fáum við eftirfarandi viðvörun:

Vöktun á gildistíma vottorðs í Windows á NetXMS

og þessi tölvupósttilkynning:

Vöktun á gildistíma vottorðs í Windows á NetXMS

Það er allt á hreinu núna. Það væri auðvitað hægt að setja upp mælaborð og smíða línurit, en fyrir skírteini væru þetta nokkuð tilgangslausar og leiðinlegar beinar línur, ólíkt til dæmis myndritum af örgjörva eða minnisálagi. En meira um þetta einhvern annan tíma.

Heimild: www.habr.com

Bæta við athugasemd