Monitro dyddiad dod i ben tystysgrif yn Windows ar NetXMS

Yn ddiweddar, roeddem yn wynebu'r dasg o fonitro cyfnod dilysrwydd tystysgrifau ar weinyddion Windows. Wel, sut wnes i godi ar Γ΄l i'r tystysgrifau droi'n bwmpen sawl gwaith, ar yr union adeg pan oedd y cydweithiwr barfog a oedd yn gyfrifol am eu hadnewyddu ar wyliau. Ar Γ΄l hynny, roedd ef a minnau'n amau ​​rhywbeth a phenderfynu meddwl amdano. Gan ein bod yn gweithredu system fonitro NetXMS yn araf, dyma'r brif ymgeisydd ac, mewn egwyddor, yr unig ymgeisydd ar gyfer y dasg hon.

Cafwyd y canlyniad o'r diwedd yn y ffurf ganlynol:

Monitro dyddiad dod i ben tystysgrif yn Windows ar NetXMS

Ac mae'r broses ei hun yn parhau.

Ewch. Nid oes cownter adeiledig ar gyfer tystysgrifau sy'n dod i ben yn NetXMS, felly mae angen i chi greu eich un eich hun a defnyddio sgriptiau i ddarparu data iddo. Wrth gwrs, ar Powershell, Windows yw hwn. Dylai'r sgript ddarllen yr holl dystysgrifau yn y system weithredu, cymryd eu dyddiad dod i ben mewn dyddiau oddi yno a throsglwyddo'r rhif hwn i NetXMS. Trwy ei asiant. Dyna lle byddwn ni'n dechrau.

Opsiwn Un, symlaf. Yn syml, mynnwch nifer y dyddiau tan ddyddiad dod i ben y dystysgrif gyda'r dyddiad agosaf.

Er mwyn i weinydd NetXMS wybod am fodolaeth ein paramedr arferol, rhaid iddo ei dderbyn gan yr asiant. Fel arall, ni ellir ychwanegu'r paramedr hwn oherwydd ei absenoldeb. Felly, yn y ffeil ffurfweddu asiant nxagentd.conf rydym yn ychwanegu llinyn paramedr allanol o'r enw HTTPS.CertificateExpireDateSimple, lle rydym yn cofrestru lansiad y sgript:

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

O ystyried bod y sgript yn cael ei lansio dros y rhwydwaith, mae angen i chi gofio am Polisi Gweithredu, a pheidiwch ag anghofio'r β€œ-NoLogo -NoProfile -NonInteractive” arall hefyd, a hepgorais er mwyn gwella darllenadwyedd cod.

O ganlyniad, mae'r ffurfwedd asiant yn edrych rhywbeth fel hyn:

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

Ar Γ΄l hyn, mae angen i chi arbed y config ac ailgychwyn yr asiant. Gallwch chi wneud hyn o'r consol NetXMS: agorwch y ffurfwedd (Golygu ffeil cyfluniad asiant), ei olygu, gweithredu Save & Apply, ac o ganlyniad, mewn gwirionedd, bydd yr un peth yn digwydd. Yna ailddarllenwch y ffurfweddiad (PΓ΄l> Ffurfweddu), os nad oes gennych y cryfder i aros o gwbl. Ar Γ΄l y camau hyn, dylech allu ychwanegu ein paramedr arferol.

Yn y consol NetXMS ewch i Ffurfweddiad Casglu Data gweinydd arbrofol yr ydym yn mynd i fonitro tystysgrifau arno a chreu paramedr newydd yno (yn y dyfodol, ar Γ΄l cyfluniad, mae'n gwneud synnwyr ei drosglwyddo i dempledi). Dewiswch HTTPS.CertificateExpireDateSimple o'r rhestr, rhowch Ddisgrifiad gydag enw clir, gosodwch y math i Gyfanrif a ffurfweddwch y cyfwng pleidleisio. At ddibenion dadfygio, mae'n gwneud synnwyr i'w wneud yn fyrrach, 30 eiliad, er enghraifft. Popeth yn barod, dyna ddigon am y tro.

Gallwch wirio ... na, mae'n rhy gynnar. Nawr, wrth gwrs, ni chawn unrhyw beth. Yn syml oherwydd nad yw'r sgript wedi'i ysgrifennu eto. Gadewch i ni gywiro'r hepgoriad hwn. Yn syml, bydd y sgript yn dangos rhif, sef nifer y dyddiau sy'n weddill nes bod y dystysgrif yn dod i ben. Y lleiaf oll sydd ar gael. Sgript enghreifftiol:

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
}

Mae'n troi allan fel hyn:

Monitro dyddiad dod i ben tystysgrif yn Windows ar NetXMS

723 diwrnod, bron i ddwy flynedd ar Γ΄l nes i'r dystysgrif ddod i ben. Mae'n rhesymegol, oherwydd fe wnes i ailgyhoeddi tystysgrifau ar gyfer mainc prawf Exchange yn eithaf diweddar.

Roedd yn opsiwn hawdd. Mae'n debyg y bydd rhywun yn fodlon Γ’ hyn, ond roedden ni eisiau mwy. Fe wnaethom osod y dasg i ni ein hunain o gael rhestr o'r holl dystysgrifau ar y gweinydd, yn Γ΄l enw, ac i bob un weld nifer y dyddiau sy'n weddill nes bod y dystysgrif yn dod i ben.

Yr ail opsiwn, ychydig yn fwy cymhleth.

Unwaith eto rydym yn golygu'r ffurfwedd asiant ac yno, yn lle'r llinell gyda ExternalParameter, rydym yn ysgrifennu dau arall:

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

Π’ Rhestr Allanol rydym yn unig yn cael rhestr o dannau. Yn ein hachos ni, rhestr o linynnau gydag enwau tystysgrifau. Byddwn yn derbyn rhestr o'r llinellau hyn gan ddefnyddio'r sgript. Enw rhestr - HTTPS.Enwau Tystysgrif.

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

Ac eisoes i mewn Paramedr Allanol Rydyn ni'n mewnbynnu rhesi o'r rhestr ExternalList, ac yn yr allbwn rydyn ni'n cael yr un nifer o ddyddiau ar gyfer pob un. Y dynodwr yw Bawdlun y dystysgrif. Sylwch fod HTTPS.CertificateExpireDate yn cynnwys seren (*) yn yr amrywiad hwn. Mae hyn yn angenrheidiol fel ei fod yn derbyn newidynnau allanol, dim ond ein TystysgrifId.

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

Yn Ffurfweddiad Casglu Data'r gweinydd, rydym yn creu paramedr newydd. Yn Paramedr rydym yn dewis ein Dyddiad Dod i Ben Tystysgrif HTTPS.(*) o'r rhestr, a (sylw!) newid y seren i {enghraifft}. Bydd y pwynt pwysig hwn yn caniatΓ‘u ichi greu rhifydd ar wahΓ’n ar gyfer pob achos (tystysgrif). Mae'r gweddill wedi'i lenwi fel yn y fersiwn flaenorol:

Monitro dyddiad dod i ben tystysgrif yn Windows ar NetXMS

Er mwyn cael rhywbeth i greu rhifyddion ohono, ar y tab Instance Discovery mae angen i chi ddewis Rhestr Asiant o'r rhestr ac yn y maes Enw Rhestr rhowch enw ein ExternalList o'r sgript - HTTPS.CertificateNames.

Bron yn barod, arhoswch ychydig neu gorfodi PΓ΄l > Ffurfweddu a Phleidlais > Darganfod Enghreifftiol os yw'n gwbl amhosibl aros. O ganlyniad, rydym yn cael ein holl dystysgrifau gyda chyfnodau dilysrwydd:

Monitro dyddiad dod i ben tystysgrif yn Windows ar NetXMS

Beth sydd ei angen arnoch chi? Wel, ie, dim ond mwydyn perffeithrwydd sy'n edrych ar y Bawdlun diangen hwn yn enw'r cownter gyda llygaid trist ac nid yw'n gadael i mi orffen yr erthygl. Er mwyn ei fwydo, agorwch briodweddau'r cownter eto ac ar y tab Instance Discovery, yn y maes "Sgript hidlo darganfod Instance", ychwanegwch yr un sydd wedi'i ysgrifennu yn NXSL (Iaith fewnol NetXMS) sgript:

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

a fydd yn hidlo Thumbprint:

Monitro dyddiad dod i ben tystysgrif yn Windows ar NetXMS

Ac i'w ddangos wedi'i hidlo, ar y tab Cyffredinol yn y maes Disgrifiad, newidiwch CertificateExpireDate: {instance} i Tystysgrif Dod i Ben: {instance-name}:

Monitro dyddiad dod i ben tystysgrif yn Windows ar NetXMS

Dyna ni, yn olaf y llinell derfyn gan KDPV:

Monitro dyddiad dod i ben tystysgrif yn Windows ar NetXMS

Onid yw'n harddwch?

Y cyfan sydd ar Γ΄l yw gosod rhybuddion fel eu bod yn cyrraedd trwy e-bost pan ddaw'r dystysgrif i ben.

1. Yn gyntaf mae angen i ni greu Templed Digwyddiad i'w actifadu pan fydd gwerth y cownter yn gostwng i ryw drothwy a osodwyd gennym. YN Ffurfweddu Digwyddiad gadewch i ni greu dau dempled newydd gydag enwau fel CertificateExpireDate_Threshold_Activate gyda statws rhybudd:

Monitro dyddiad dod i ben tystysgrif yn Windows ar NetXMS

a chyffelyb TystysgrifExpireDate_Threshold_Analluogi gyda statws Normal.

2. Nesaf, ewch i briodweddau'r cownter a gosodwch y trothwy ar y tab Tresholds:

Monitro dyddiad dod i ben tystysgrif yn Windows ar NetXMS

lle rydym yn dewis ein digwyddiadau a grΓ«wyd TystysgrifExpireDate_Threshold_Activate a CertificateExpireDate_Threshold_Deactivate, gosodwch nifer y samplau (Samplau) i 1 (yn benodol ar gyfer y rhifydd hwn nid oes unrhyw bwynt gosod mwy), y gwerth yw 30 (diwrnod), er enghraifft, ac, yn bwysig, gosod amser ailadrodd y digwyddiad. Ar gyfer tystysgrifau cynhyrchu, rwy'n ei osod unwaith y dydd (86400 eiliad), fel arall gallwch chi foddi mewn hysbysiadau (sydd, gyda llaw, wedi digwydd unwaith, cymaint fel bod y blwch post yn llawn dros y penwythnos). Ar gyfer amser dadfygio, mae'n gwneud synnwyr ei osod yn is, 60 eiliad, er enghraifft.

3. Yn Ffurfweddiad Gweithred creu templed llythyr hysbysu, fel hyn:

Monitro dyddiad dod i ben tystysgrif yn Windows ar NetXMS

Mae'r rhain i gyd %m, %S, ac ati. β€” macros y bydd gwerthoedd o'n paramedr yn cael eu rhoi yn eu lle. Fe'u disgrifir yn fanylach yn llaw NetXMS.

4. Ac yn olaf, gan gyfuno y pwyntiau blaenorol, yn Polisi Prosesu Digwyddiadau creu rheol ar gyfer creu Larwm ac anfon llythyr:

Monitro dyddiad dod i ben tystysgrif yn Windows ar NetXMS

Rydym yn achub y polisi, gellir profi popeth. Gadewch i ni osod y trothwy yn uwch i'w wirio. Mae fy nhystysgrif agosaf yn dod i ben mewn 723 diwrnod, gosodais hi i 724 i'w gwirio. O ganlyniad, rydyn ni'n cael y larwm canlynol:

Monitro dyddiad dod i ben tystysgrif yn Windows ar NetXMS

a'r hysbysiad e-bost hwn:

Monitro dyddiad dod i ben tystysgrif yn Windows ar NetXMS

Dyna i gyd yn sicr nawr. Byddai'n bosibl, wrth gwrs, sefydlu dangosfwrdd ac adeiladu graffiau, ond ar gyfer tystysgrifau byddai'r rhain braidd yn ddiystyr a llinellau syth diflas, yn wahanol i graffiau o brosesydd neu lwyth cof, er enghraifft. Ond, mwy am hyn ryw dro arall.

Ffynhonnell: hab.com

Ychwanegu sylw