NetXMS дээр Windows дээрх гэрчилгээний хүчинтэй хугацааг хянах

Саяхан бид Windows серверүүд дээрх гэрчилгээний хүчинтэй хугацааг хянах даалгавартай тулгарсан. Сертификатууд нь хэд хэдэн удаа хулуу болж хувирсны дараа би яаж босов, яг тэр үед, тэдний сунгалтыг хариуцдаг сахалтай хамтрагч амралтаа авч байсан. Үүний дараа тэр бид хоёр ямар нэг зүйл сэжиглэж, энэ талаар бодохоор шийдсэн. Бид NetXMS хяналтын системийг аажмаар нэвтрүүлж байгаа тул энэ нь үндсэн бөгөөд зарчмын хувьд энэ ажлыг гүйцэтгэх цорын ганц нэр дэвшигч болсон.

Үр дүнг эцэст нь дараах хэлбэрээр олж авав.

NetXMS дээр Windows дээрх гэрчилгээний хүчинтэй хугацааг хянах

Мөн процесс өөрөө үргэлжилж байна.

Яв. 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 консолоос хийж болно: тохиргоог нээх (агентийн тохиргооны файлыг засварлах), засварлах, Save&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
}

Иймэрхүү юм болж хувирдаг:

NetXMS дээр Windows дээрх гэрчилгээний хүчинтэй хугацааг хянах

Сертификат дуусахад 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(*) жагсаалтаас, мөн (анхаарал!) одыг өөрчил {жишээ}. Энэ чухал цэг нь жишээ (сертификат) бүрт тусдаа тоолуур үүсгэх боломжийг танд олгоно. Үлдсэн хэсгийг өмнөх хувилбарын адил бөглөсөн болно.

NetXMS дээр Windows дээрх гэрчилгээний хүчинтэй хугацааг хянах

Тоолуур үүсгэх ямар нэг зүйлтэй болохын тулд Instance Discovery таб дээрээс жагсаалтаас Agent List-ийг сонгож, List Name талбарт скриптээс манай Гадаад жагсаалтын нэрийг оруулна уу - HTTPS.CertificateNames.

Бараг бэлэн байна, бага зэрэг хүлээх эсвэл хүлээх бүрэн боломжгүй бол Санал асуулга > Тохиргоо ба санал асуулга > Instance Discovery-г хүчээр хийнэ үү. Үүний үр дүнд бид хүчинтэй байх хугацаатай бүх гэрчилгээгээ авдаг.

NetXMS дээр Windows дээрх гэрчилгээний хүчинтэй хугацааг хянах

Чамд юу хэрэгтэй? За, тийм ээ, зөвхөн төгс төгөлдөр байдлын хорхой л лангууны нэр дээрх шаардлагагүй Эрхий хурууны хээг гунигтай нүдээр харж, нийтлэлээ дуусгахыг зөвшөөрөхгүй байна. Үүнийг оруулахын тулд тоолуурын шинж чанарыг дахин нээж, Instance Discovery табын "Instance Discovery filter script" талбарт бичсэнийг нэмнэ үү. NXSL (NetXMS дотоод хэл) скрипт:

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

Энэ нь эрхий хурууны хээг шүүх болно:

NetXMS дээр Windows дээрх гэрчилгээний хүчинтэй хугацааг хянах

Үүнийг шүүсэн байдлаар харуулахын тулд Тодорхойлолтын талбарын Ерөнхий табын CertificateExpireDate: {instance}-г өөрчилнө үү. CertificateExpireDate: {instance-name}:

NetXMS дээр Windows дээрх гэрчилгээний хүчинтэй хугацааг хянах

Ингээд л эцэст нь KDPV-ийн барианы шугам:

NetXMS дээр Windows дээрх гэрчилгээний хүчинтэй хугацааг хянах

Гоо сайхан уу?

Зөвхөн гэрчилгээний хугацаа дуусахад имэйлээр ирэх дохиог тохируулахад л үлддэг.

1. Эхлээд бид Event Template үүсгэх хэрэгтэй бөгөөд тоолуурын утга бидний тогтоосон босго хүртэл буурах үед үүнийг идэвхжүүлэх хэрэгтэй. IN Үйл явдлын тохиргоо гэх мэт нэртэй хоёр шинэ загвар үүсгэцгээе Сертификат дуусах огноо_босгыг_идэвхжүүлэх Анхааруулга статустай:

NetXMS дээр Windows дээрх гэрчилгээний хүчинтэй хугацааг хянах

болон үүнтэй төстэй Сертификат ДуусахОгноо_Босго_Идэвхгүй болгох Хэвийн төлөвтэй.

2. Дараа нь тоолуурын шинж чанарууд руу очоод Tresholds таб дээр босго оноог тогтооно уу:

NetXMS дээр Windows дээрх гэрчилгээний хүчинтэй хугацааг хянах

Бид үүсгэсэн үйл явдлуудаа сонгоход CertificateExpireDate_Threshold_Activate болон CertificateExpireDate_Threshold_Deactivate, дээжийн тоог (Дээж) 1 болгож (ялангуяа энэ тоолуурын хувьд илүү тохируулах шаардлагагүй), утгыг жишээлбэл 30 (өдөр), мөн хамгийн чухал нь тохируулах үйл явдлын давтагдах хугацаа. Үйлдвэрлэлийн гэрчилгээний хувьд би үүнийг өдөрт нэг удаа (86400 секунд) тохируулдаг, эс тэгвээс та мэдэгдлүүдэд живж болно (дашрамд хэлэхэд энэ нь нэг удаа тохиолдсон тул амралтын өдрүүдэд шуудангийн хайрцаг дүүрэн байсан). Дибаг хийх цагийг жишээлбэл, 60 секундээр бага болгох нь зүйтэй юм.

3. Дотор нь Үйлдлийн тохиргоо дараах байдлаар мэдэгдлийн захидлын загвар үүсгэнэ үү:

NetXMS дээр Windows дээрх гэрчилгээний хүчинтэй хугацааг хянах

Эдгээр бүх %m, %S гэх мэт. - бидний параметрийн утгыг орлуулах макронууд. Тэдгээрийг илүү дэлгэрэнгүй тайлбарласан болно гарын авлага NetXMS.

4. Тэгээд эцэст нь, өмнөх оноо нэгтгэх, руу Үйл явдал боловсруулах бодлого Сэрүүлэг үүсгэж, захидал илгээх дүрмийг бий болго:

NetXMS дээр Windows дээрх гэрчилгээний хүчинтэй хугацааг хянах

Бид бодлогыг хадгалдаг, бүх зүйлийг туршиж үзэх боломжтой. Шалгахын тулд босгыг өндөр болгоё. Миний хамгийн ойрын гэрчилгээний хугацаа 723 хоногийн дараа дуусна. Би үүнийг шалгахын тулд 724 болгож тохируулсан. Үүний үр дүнд бид дараах дохиог авна.

NetXMS дээр Windows дээрх гэрчилгээний хүчинтэй хугацааг хянах

мөн энэ имэйл мэдэгдэл:

NetXMS дээр Windows дээрх гэрчилгээний хүчинтэй хугацааг хянах

Энэ бүхэн одоо тодорхой байна. Мэдээжийн хэрэг хяналтын самбар байрлуулж, график үүсгэх боломжтой боловч гэрчилгээний хувьд эдгээр нь процессор эсвэл санах ойн ачааллын графикаас ялгаатай нь зарим талаараа утгагүй, уйтгартай шулуун шугамууд байх болно. Гэхдээ энэ талаар өөр цагт илүү ихийг хэлье.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх