Мониторинги мӯҳлати эътибори сертификат дар Windows дар NetXMS

Ба наздикӣ мо бо вазифаи мониторинги мӯҳлати эътибори сертификатҳо дар серверҳои Windows дучор омадем. Хуб, чӣ гуна ман пас аз чанд маротиба ба каду табдил ёфтани шаҳодатномаҳо аз ҷой хестам, ҳамон вақт, ки ҳамтои ришдор, ки масъули навсозии онҳо дар рухсатӣ буд. Баъди ин ману у ба чизе гумон карда, карор додем, ки дар ин бора фикр кунем. Азбаски мо системаи мониторинги NetXMS-ро оҳиста ҷорӣ карда истодаем, он барои иҷрои ин вазифа номзади асосӣ ва аслан ягона номзад гардид.

Дар ниҳоят, натиҷа дар шакли зерин ба даст омад:

Мониторинги мӯҳлати эътибори сертификат дар Windows дар NetXMS

Ва худи раванд идома дорад.

Бирав. Дар NetXMS ҳисобкунаки дарунсохт барои мӯҳлати анҷоми сертификатҳо вуҷуд надорад, аз ин рӯ ба шумо лозим аст, ки худатонро эҷод кунед ва скриптҳоро барои таъмини он бо маълумот истифода баред. Албатта, дар Powershell, ин Windows аст. Скрипт бояд ҳамаи сертификатҳоро дар системаи оператсионӣ хонад, мӯҳлати эътибори онҳоро дар давоми рӯзҳо аз он ҷо бигирад ва ин рақамро ба NetXMS гузаронад. Ба воситаи агенти худ. Дар он ҷо мо оғоз мекунем.

Як варианти як, соддатарин. Танҳо шумораи рӯзҳоро то ба охир расидани мӯҳлати сертификат бо санаи наздиктарин гиред.

Барои он ки сервери NetXMS дар бораи мавҷудияти параметри фармоишии мо донад, он бояд онро аз агент қабул кунад. Дар акси ҳол, ин параметрро аз сабаби набудани он илова кардан мумкин нест. Аз ин рӯ, дар файли конфигуратсияи агент nxagentd.conf мо як сатри параметри беруна илова мекунем HTTPS.CertificateExpireDateSimple, ки дар он мо оғози скриптро сабт мекунем:

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

Бо дарназардошти он, ки скрипт тавассути шабака оғоз мешавад, шумо бояд дар бораи он ёд гиред Сиёсати иҷроиш, ва инчунин дигар "-NoLogo -NoProfile -NonInteractive" -ро фаромӯш накунед, ки ман онро барои хондан беҳтар кардани код сарфи назар кардам.

Дар натиҷа, конфигуратсияи агент чунин менамояд:

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

Пас аз ин, шумо бояд конфигуратсияро захира кунед ва агентро аз нав оғоз кунед. Шумо метавонед ин корро аз консоли NetXMS иҷро кунед: конфигуратсияро кушоед (файли конфигуратсияи агентро таҳрир кунед), онро таҳрир кунед, Захира ва Apply -ро иҷро кунед, ки дар натиҷа, воқеан, ҳамон чизе рӯй медиҳад. Пас конфигуратсияро аз нав хонед (Пурсиш > Танзимот), агар шумо барои интизор шудан қувват надоред. Пас аз ин қадамҳо, шумо бояд параметри фармоишии моро илова кунед.

Дар консоли NetXMS ба Конфигуратсияи ҷамъоварии маълумот сервери таҷрибавӣ, ки дар он мо сертификатҳоро назорат мекунем ва дар он ҷо параметри нав эҷод мекунем (дар оянда пас аз конфигуратсия интиқол додани он ба қолибҳо маъно дорад). Аз рӯйхат HTTPS.CertificateExpireDateSimple -ро интихоб кунед, Тавсифро бо номи равшан ворид кунед, навъи онро ба бутуни адад таъин кунед ва фосилаи овоздиҳиро танзим кунед. Барои мақсадҳои ислоҳ, масалан, кӯтоҳтар кардани он, 30 сония, маъно дорад. Ҳама чиз омода аст, ҳоло бас аст.

Шумо метавонед тафтиш кунед ... не, ҳоло хеле барвақт аст. Ҳоло, албатта, мо чизе ба даст намеорем. Фақат аз он сабаб, ки скрипт ҳанӯз навишта нашудааст. Биёед ин камбудиро ислох кунем. Скрипт танҳо рақамеро нишон медиҳад, ки шумораи рӯзҳои боқимонда то ба охир расидани мӯҳлати сертификат. Аз ҳама ҳадди ақали дастрас. Намунаи скрипт:

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
}

Ин чунин рӯй медиҳад:

Мониторинги мӯҳлати эътибори сертификат дар Windows дар NetXMS

То ба охир расидани мӯҳлати шаҳодатнома 723 рӯз, қариб ду сол боқӣ мондааст. Ин мантиқист, зеро ман чанде пеш сертификатҳоро барои курсии санҷиши Exchange дубора додам.

Ин як варианти осон буд. Шояд касе бо ин каноат кунад, вале мо бештар мехостем. Мо дар назди худ вазифа гузоштаем, ки рӯйхати ҳамаи сертификатҳоро дар сервер аз рӯи ном ва барои ҳар яки онҳо дидани шумораи рӯзҳои боқимондаи то ба охир расидани мӯҳлати сертификатро гирем.

Интихоби дуюм, каме мураккабтар.

Мо бори дигар конфигуратсияи агентро таҳрир мекунем ва дар он ҷо ба ҷои сатри ExternalParameter, мо ду нафари дигарро менависем:

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

В Рӯйхати беруна мо танҳо рӯйхати сатрҳоро мегирем. Дар ҳолати мо, рӯйхати сатрҳо бо номҳои сертификат. Мо рӯйхати ин сатрҳоро бо истифода аз скрипт мегирем. Номи рӯйхат - HTTPS.Номҳои сертификат.

Скрипт 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)"
    }
}

Ва аллакай дар Параметри беруна Мо сатрҳоро аз рӯйхати ExternalList ворид мекунем ва дар натиҷа барои ҳар як шумораи ҳамон рӯзҳо мегирем. Идентификатор изи ангушти сертификат мебошад. Дар хотир доред, ки HTTPS.CertificateExpireDate дар ин вариант ситорача (*) дорад. Ин зарур аст, то он тағирёбандаҳои берунаро қабул кунад, танҳо CertificateId мо.

Скрипт 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)"
}

Дар конфигуратсияи Ҷамъоварии маълумотҳои сервер, мо параметри нав эҷод мекунем. Дар Параметр мо худамонро интихоб мекунем HTTPS.CertificateExpireDate(*) аз рӯйхат, ва (диққат!) тағир додани ситорача ба {мисол}. Ин нуқтаи муҳим ба шумо имкон медиҳад, ки барои ҳар як мисол (шаҳодатнома) ҳисобкунаки алоҳида эҷод кунед. Қисми боқимонда мисли версияи қаблӣ пур карда мешавад:

Мониторинги мӯҳлати эътибори сертификат дар Windows дар NetXMS

Барои он ки чизе барои сохтани ҳисобкунакҳо аз он дошта бошед, дар ҷадвали Кашфи мисол шумо бояд Рӯйхати агентро аз рӯйхат интихоб кунед ва дар майдони Номи рӯйхат номи Рӯйхати берунаи моро аз скрипт ворид кунед - HTTPS.CertificateNames.

Қариб омода, каме интизор шавед ё пурсиш > Конфигуратсия ва Назарпурсӣ > Кашфи мисолро маҷбур кунед, агар интизор шудан комилан ғайриимкон бошад. Дар натиҷа, мо ҳама шаҳодатномаҳои худро бо мӯҳлати эътибор мегирем:

Мониторинги мӯҳлати эътибори сертификат дар Windows дар NetXMS

Ба шумо чӣ лозим? Хуб, бале, танҳо кирми камолотпарастӣ ба ин Барҷастаи нодаркор ба номи ҳисобкунак бо чашмони ғамгин менигарад ва намегузорад, ки мақоларо тамом кунам. Барои таъом додани он, хосиятҳои ҳисобкунакро боз кушоед ва дар ҷадвали Кашфи мисол, дар майдони "Скрипти филтри кашфи мисол" он чизеро, ки дар он навишта шудааст, илова кунед. NXSL (Забони дохилии NetXMS) скрипт:

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

ки изи ангуштро филтр мекунад:

Мониторинги мӯҳлати эътибори сертификат дар Windows дар NetXMS

Ва барои намоиши он филтршуда, дар ҷадвали умумӣ дар майдони Тавсиф, CertificateExpireDate: {instance}-ро ба тағир диҳед CertificateExpireDate: {instance-name}:

Мониторинги мӯҳлати эътибори сертификат дар Windows дар NetXMS

Ин аст, ниҳоят хати марра аз KDPV:

Мониторинги мӯҳлати эътибори сертификат дар Windows дар NetXMS

Оё ин зебоӣ нест?

Танҳо насб кардани огоҳиҳо боқӣ мемонад, то онҳо ҳангоми ба охир расидани мӯҳлати сертификат тавассути почтаи электронӣ дастрас шаванд.

1. Аввалан мо бояд Шаблони Ҳодисаро эҷод кунем, то онро фаъол созем, вақте ки арзиши ҳисобкунак то як ҳадди муқарраркардаи мо кам мешавад. ДАР Конфигуратсияи ҳодиса биёед ду қолаби нав бо номҳои монанди эҷод CertificateExpireDate_threshold_Activate бо ҳолати огоҳӣ:

Мониторинги мӯҳлати эътибори сертификат дар Windows дар NetXMS

ва монанд CertificateExpireDate_threshold_Activate бо ҳолати муқаррарӣ.

2. Баъдан, ба хосиятҳои ҳисобкунак гузаред ва остонаро дар ҷадвали Tresholds муқаррар кунед:

Мониторинги мӯҳлати эътибори сертификат дар Windows дар NetXMS

ки дар он мо рӯйдодҳои офаридаи худро CertificateExpireDate_Threshold_Activate ва CertificateExpireDate_Threshold_Deactivate-ро интихоб мекунем, шумораи намунаҳоро (Намунаҳо) ба 1 муқаррар кунед (махсусан барои ин ҳисобкунак барои гузоштани зиёдатӣ маъное надорад), арзиш 30 (рӯз) аст, масалан, ва муҳимтар аз он, муқаррар кунед вақти такрори ҳодиса. Барои шаҳодатномаҳои истеҳсолӣ, ман онро дар як рӯз як маротиба муқаррар кардам (86400 сония), вагарна шумо метавонед дар огоҳиномаҳо ғарқ шавед (дар омади гап, як маротиба рӯй дод, то дар рӯзҳои истироҳат қуттии почта пур шуд). Барои вақти ислоҳи он, масалан, онро камтар, 60 сония муқаррар кардан маъно дорад.

3. Дар Конфигуратсияи амал як қолаби номаи огоҳиро эҷод кунед, ба монанди ин:

Мониторинги мӯҳлати эътибори сертификат дар Windows дар NetXMS

Ҳамаи ин %m, %S ва ғайра. - макросҳое, ки ба онҳо арзишҳои параметри мо иваз карда мешаванд. Онҳо дар муфассалтар тавсиф шудаанд дастур NetXMS.

4. Ва ниҳоят, омезиши нуктаҳои қаблӣ, ба Сиёсати коркарди рӯйдодҳо қоидаеро эҷод кунед, ки мувофиқи он ҳушдор эҷод карда мешавад ва мактуб фиристода мешавад:

Мониторинги мӯҳлати эътибори сертификат дар Windows дар NetXMS

Мо сиёсатро захира мекунем, ҳама чизро санҷидан мумкин аст. Биёед барои тафтиш ҳадди болоро муқаррар кунем. Мӯҳлати шаҳодатномаи наздиктарини ман пас аз 723 рӯз ба охир мерасад, ман онро ба 724 гузоштам, то тафтиш кунам. Дар натиҷа мо ҳушдори зеринро мегирем:

Мониторинги мӯҳлати эътибори сертификат дар Windows дар NetXMS

ва ин огоҳиномаи почтаи электронӣ:

Мониторинги мӯҳлати эътибори сертификат дар Windows дар NetXMS

Ҳоло ҳамааш аниқ аст. Албатта, метавон панели идоракуниро таъсис дод ва графикҳо созад, аммо барои сертификатҳо инҳо хатҳои рости то андозае бемаънӣ ва дилгиркунанда хоҳанд буд, масалан, бар хилофи графикҳои протсессор ё бори хотира. Аммо, бештар дар бораи ин дафъаи дигар.

Манбаъ: will.com

Илова Эзоҳ