ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° срока Π½Π° дСйствиС Π½Π° сСртификатитС Π² Windows Π½Π° NetXMS

Наскоро ΠΏΡ€Π΅Π΄ нас възникна Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π΄Π° слСдим срока Π½Π° валидност Π½Π° сСртификатитС Π½Π° ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅ с Windows. ΠšΠ°ΠΊΡ‚ΠΎ сС случи, сСртификатитС ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ставаха Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ отговорният Π·Π° тяхното подновяванС ΠΊΠΎΠ»Π΅Π³Π° с дълга Π±Ρ€Π°Π΄Π° бСшС Π² отпуск. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΈ Π΄Π²Π°ΠΌΠ°Ρ‚Π° Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ Π΄Π° ΠΏΠΎΠ΄ΠΎΠ·ΠΈΡ€Π°ΠΌΠ΅, Ρ‡Π΅ трябва Π΄Π° помислим ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π²ΡŠΠΏΡ€ΠΎΡ. Въй ΠΊΠ°Ρ‚ΠΎ Ρƒ нас постСпСнно сС внСдрява систСма Π·Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ NetXMS, тя стана основСн ΠΈ, Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, СдинствСн ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° Ρ‚Π°Π·ΠΈ Π·Π°Π΄Π°Ρ‡Π°.

Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ бСшС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Π² Ρ‚Π°ΠΊΡŠΠ² Π²ΠΈΠ΄:

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° срока Π½Π° дСйствиС Π½Π° сСртификатитС Π² Windows Π½Π° NetXMS

А самият процСс ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ.

Π”Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ. Π’ NetXMS няма Π²Π³Ρ€Π°Π΄Π΅Π½ΠΎ брояч Π·Π° ΠΈΠ·Ρ‚ΠΈΡ‡Π°Ρ‰ΠΈ сСртификати, Π·Π°Ρ‚ΠΎΠ²Π° трябва Π΄Π° създадСм наш собствСн ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ скриптовС Π·Π° прСдоставянС Π½Π° Π΄Π°Π½Π½ΠΈ. Π Π°Π·Π±ΠΈΡ€Π° сС, Π½Π° Powershell, всС ΠΏΠ°ΠΊ Π΅ Windows. Π‘ΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ трябва Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅ всички сСртификати Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма, Π΄Π° Π²Π·Π΅ΠΌΠ΅ срока Π½Π° тяхната валидност Π² Π΄Π½ΠΈ ΠΈ Π΄Π° ΠΏΡ€Π΅Π΄Π°Π΄Π΅ Ρ‚ΠΎΠ²Π° число Π² NetXMS. Π§Ρ€Π΅Π· нСговия Π°Π³Π΅Π½Ρ‚. Π’ΠΎΡ‡Π½ΠΎ с Π½Π΅Π³ΠΎ Ρ‰Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ.

ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π½Π°ΠΉ-простият. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ броя Π΄Π½ΠΈ Π΄ΠΎ ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅Ρ‚ΠΎ Π½Π° сСртификата с Π½Π°ΠΉ-Π±Π»ΠΈΠ·ΠΊΠ° Π΄Π°Ρ‚Π°.

Π—Π° Π΄Π° ΠΌΠΎΠΆΠ΅ ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ NetXMS Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ Π·Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° нашия пСрсонализиран ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€, Ρ‚ΠΎΠΉ трябва Π΄Π° Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΎΡ‚ Π°Π³Π΅Π½Ρ‚Π°. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай Π½Π΅ Π΅ възмоТно Π΄Π° сС Π΄ΠΎΠ±Π°Π²ΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ ΠΏΠΎΡ€Π°Π΄ΠΈ Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ ΠΎΡ‚ΡΡŠΡΡ‚Π²ΠΈΠ΅. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, Π² конфигурационния Ρ„Π°ΠΉΠ» Π½Π° Π°Π³Π΅Π½Ρ‚Π° nxagentd.conf добавямС Ρ€Π΅Π΄ Π·Π° външния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ с ΠΈΠΌΠ΅Ρ‚ΠΎ HTTPS.CertificateExpireDateSimple, Π² ΠΊΠΎΠΉΡ‚ΠΎ посочвамС стартиранСто Π½Π° скрипта:

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

ΠšΠ°Ρ‚ΠΎ сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ ΡΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ сС стартира ΠΏΠΎ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, Π½Π΅ трябва Π΄Π° забравямС Π·Π° Execution Policy, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π½Π΅ Π±ΠΈΠ²Π° Π΄Π° забравямС Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ β€ž-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: ΠΎΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ конфигурацията (Edit agent’s configuration file), Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°ΠΉΡ‚Π΅, ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ Save&Apply, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ, Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚, Ρ‰Π΅ сС случи ΡΡŠΡ‰ΠΎΡ‚ΠΎ. ПослС ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ конфигурацията (Poll > Configuration), Π°ΠΊΠΎ няматС сили Π΄Π° ΠΈΠ·Ρ‡Π°ΠΊΠ°Ρ‚Π΅. Π‘Π»Π΅Π΄ Ρ‚Π΅Π·ΠΈ дСйствия трябва Π΄Π° сС появи Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ нашия пСрсонализиран ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€.

Π’ ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π° Π½Π° NetXMS ΠΎΡ‚ΠΈΠ²Π°ΠΌΠ΅ Π² Data Collection Configuration научния ΡΡŠΡ€Π²ΡŠΡ€, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ слСдим сСртификатитС ΠΈ създавамС Π½ΠΎΠ² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ (ΠΏΠΎ-късно, слСд настройката, ΠΈΠΌΠ° смисъл Π΄Π° Π³ΠΎ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΠΈΠΌ Π² шаблони). Π˜Π·Π±ΠΈΡ€Π°ΠΌΠ΅ HTTPS.CertificateExpireDateSimple ΠΎΡ‚ списъка, вписвамС описаниС с Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΠΎ ΠΈΠΌΠ΅, Ρ‚ΠΈΠΏ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ Integer ΠΈ настройвамС ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π·Π° запитвания. Π—Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈΠΌΠ° смисъл Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΠΎ-ΠΊΡ€Π°Ρ‚ΡŠΠΊ, 30 сСкунди, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π“ΠΎΡ‚ΠΎΠ²ΠΎ, Π·Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ.

МоТС Π΄Π° провСрим… Π½Π΅, всС ΠΎΡ‰Π΅ Π΅ Ρ€Π°Π½ΠΎ. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, СстСствСно, няма Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½ΠΈΡ‰ΠΎ. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΡΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ всС ΠΎΡ‰Π΅ Π½Π΅ Π΅ написан. Π˜Π·ΠΏΡ€Π°Π²ΡΠΌΠ΅ Ρ‚ΠΎΠ²Π° пропусканС. Π‘ΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ Ρ‰Π΅ Π²Ρ€ΡŠΡ‰Π° просто число, броя Π½Π° Π΄Π½ΠΈΡ‚Π΅, останали Π΄ΠΎ ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅Ρ‚ΠΎ Π½Π° сСртификата. Най-ΠΌΠ°Π»ΠΊΠ°Ρ‚Π° ΠΎΡ‚ Π½Π°Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° скрипт:

try {
    # ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ всички сСртификати ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° сСртификати
    $lmCertificates = @( Get-ChildItem -Recurse -path 'Cert:LocalMachineMy' -ErrorAction Stop )
     
    # Ако сСртификатитС липсват, Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ "10 Π³ΠΎΠ΄ΠΈΠ½ΠΈ"
    if ($lmCertificates.Count -eq 0) { return 3650 }
 
    # ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Π΄Π°Ρ‚Π°Ρ‚Π° Π½Π° ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ Π½Π° всички сСртификати
    $expirationDates = @( $lmCertificates | ForEach-Object { return $_.NotAfter } )
 
    # ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Π½Π°ΠΉ-Π±Π»ΠΈΠ·ΠΊΠ°Ρ‚Π° Π΄Π°Ρ‚Π° Π½Π° ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ ΠΎΡ‚ всички
    $minExpirationDate = ($expirationDates | Measure-Object -Minimum -ErrorAction Stop ).Minimum
 
    # ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Π½Π°ΠΉ-Π±Π»ΠΈΠ·ΠΊΠ°Ρ‚Π° Π΄Π°Ρ‚Π° Π½Π° ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ Π² Π±Ρ€ΠΎΠΉ оставащи Π΄Π½ΠΈ с Π·Π°ΠΊΡ€ΡŠΠ³Π»ΡΠ½Π΅ към ΠΏΠΎ-ниска стойност
    $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"

Π’ ExternalList просто ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ списък ΠΎΡ‚ Ρ€Π΅Π΄ΠΎΠ²Π΅. Π’ нашия случай, списък ΠΎΡ‚ Ρ€Π΅Π΄ΠΎΠ²Π΅ с ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° сСртификатитС. Π’ΠΎΠ·ΠΈ списък Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° скрипта. Π˜ΠΌΠ΅Ρ‚ΠΎ Π½Π° списъка Π΅ HTTPS.CertificateNames.

Π‘ΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ 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)"
    }
}

А Π²Π΅Ρ‡Π΅ Π² ExternalParameter НиС ΠΏΠΎΠ΄Π°Π²Π°ΠΌΠ΅ Π½Π° Π²Ρ…ΠΎΠ΄Π° Π½ΠΈΠ·ΠΈ ΠΎΡ‚ списъка ExternalList, Π° Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΡŠΡ‰ΠΎΡ‚ΠΎ количСство Π΄Π½ΠΈ Π·Π° всяка. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΡŠΡ‚ Π΅ Thumbprint Π½Π° сСртификата. ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ 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)"
}

Π’ конфигурацията Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° създавамС Π½ΠΎΠ² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€. Π’ ΠΏΠΎΠ»Π΅Ρ‚ΠΎ Parameter ΠΈΠ·Π±ΠΈΡ€Π°ΠΌΠ΅ нашия HTTPS.CertificateExpireDate(*) ΠΎΡ‚ списъка ΠΈ, (Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!) смСнямС Π·Π²Π΅Π·Π΄ΠΈΡ‡ΠΊΠ°Ρ‚Π° с {instance}. Π’ΠΎΠ·ΠΈ Π²Π°ΠΆΠ΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ‰Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° създадСм ΠΎΡ‚Π΄Π΅Π»Π΅Π½ брояч Π·Π° всСки инстанс (сСртификат). ΠžΡΡ‚Π°Π½Π°Π»ΠΎΡ‚ΠΎ сС запълва, ΠΊΠ°ΠΊΡ‚ΠΎ Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° срока Π½Π° дСйствиС Π½Π° сСртификатитС Π² Windows Π½Π° NetXMS

Π—Π° Π΄Π° ΠΈΠΌΠ° ΠΎΡ‚ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ броячитС, Π½Π° Ρ€Π°Π·Π΄Π΅Π»Π° Instance Discovery трябва Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Agent List ΠΎΡ‚ списъка ΠΈ Π² ΠΏΠΎΠ»Π΅Ρ‚ΠΎ List Name Π΄Π° Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° нашия ExternalList ΠΎΡ‚ скрипта β€” HTTPS.CertificateNames.

ΠŸΠΎΡ‡Ρ‚ΠΈ Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ, ΠΌΠ°Π»ΠΊΠΎ Π΄Π° ΠΈΠ·Ρ‡Π°ΠΊΠ°ΠΌΠ΅ ΠΈΠ»ΠΈ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ€ΡŠΡ‡Π½ΠΎ Poll > Configuration ΠΈ Poll > Instance Discovery, Π°ΠΊΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Ρ‡Π°ΠΊΠ°ΠΌΠ΅. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ всичкитС Π½ΠΈ сСртификати със сроковС Π½Π° валидност:

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° срока Π½Π° дСйствиС Π½Π° сСртификатитС Π² Windows Π½Π° NetXMS

Π’ΠΎΡ‡Π½ΠΎ Ρ‚ΠΎΠ²Π° Π»ΠΈ Π΅? Π•, Π΄Π°, Π½ΠΎ чСрвСят Π½Π° ΠΏΠ΅Ρ€Ρ„Π΅ΠΊΡ†ΠΈΠΎΠ½ΠΈΠ·ΠΌΠ° Π³Π»Π΅Π΄Π° Π½Π° Ρ‚ΠΎΠ·ΠΈ Π½Π΅Π½ΡƒΠΆΠ΅Π½ Thumbprint Π² ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° брояча с Ρ‚ΡŠΠΆΠ½ΠΈ ΠΎΡ‡ΠΈ ΠΈ Π½Π΅ ΠΌΡƒ Π΄Π°Π²Π° Π΄Π° Π·Π°Π²ΡŠΡ€ΡˆΠΈ статията. Π—Π° Π΄Π° Π³ΠΎ Π½Π°Ρ…Ρ€Π°Π½ΠΈΠΌ, ΠΎΡ‚Π½ΠΎΠ²ΠΎ отварямС свойствата Π½Π° брояча ΠΈ Π½Π° Ρ€Π°Π·Π΄Π΅Π»Π° 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;

ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π° Thumbprint:

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° срока Π½Π° дСйствиС Π½Π° сСртификатитС Π² Windows Π½Π° NetXMS

А Π·Π° Π΄Π° сС ΠΏΠΎΠΊΠ°ΠΆΠ΅ отфилтрираният, Π½Π° Ρ€Π°Π·Π΄Π΅Π»Π° General Π² ΠΏΠΎΠ»Π΅Ρ‚ΠΎ Description промСнямС CertificateExpireDate: {instance} Π½Π° CertificateExpireDate: {instance-name}:

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° срока Π½Π° дСйствиС Π½Π° сСртификатитС Π² Windows Π½Π° NetXMS

Всичко, Π½Π°ΠΉ-накрая ΠΊΡ€Π°ΠΉ ΠΎΡ‚ ΠšΠ”ΠŸΠ’:

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° срока Π½Π° дСйствиС Π½Π° сСртификатитС Π² Windows Π½Π° NetXMS

ΠšΡ€Π°ΡΠΈΠ²Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π°Π»ΠΈ?

ΠžΡΡ‚Π°Π²Π° Π΄Π° настроим извСстия, Π·Π° Π΄Π° Π³ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Π½Π° ΠΈΠΌΠ΅ΠΉΠ», ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΡΡ€ΠΎΠΊΡŠΡ‚ Π½Π° сСртификата Π½Π°Π±Π»ΠΈΠΆΠ°Π²Π° логичния си ΠΊΡ€Π°ΠΉ.

1. ΠŸΡŠΡ€Π²ΠΎ трябва Π΄Π° създадСм шаблон Π·Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ (Event Template), Π·Π° Π΄Π° сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° ΠΏΡ€ΠΈ намаляванС Π½Π° стойността Π½Π° брояча Π΄ΠΎ Π·Π°Π΄Π°Π΄Π΅Π½ ΠΎΡ‚ нас ΠΏΡ€Π°Π³. Π’ Event Configuration създавамС Π΄Π²Π° Π½ΠΎΠ²ΠΈ шаблона с ΠΈΠΌΠ΅Π½Π°, Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ CertificateExpireDate_Threshold_Activate със статус Warning:

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° срока Π½Π° дСйствиС Π½Π° сСртификатитС Π² Windows Π½Π° NetXMS

ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ CertificateExpireDate_Threshold_Deactivate със статус Normal.

2. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΎΡ‚ΠΈΠ²Π°ΠΌΠ΅ Π² свойствата Π½Π° брояча ΠΈ Π½Π° Ρ€Π°Π·Π΄Π΅Π»Π° Tresholds настройвамС ΠΏΡ€Π°Π³Π°:

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° срока Π½Π° дСйствиС Π½Π° сСртификатитС Π² Windows Π½Π° NetXMS

къдС ΠΈΠ·Π±ΠΈΡ€Π°ΠΌΠ΅ Π½Π°ΡˆΠΈΡ‚Π΅ создани ΡΡŠΠ±ΠΈΡ‚ΠΈΡ CertificateExpireDate_Threshold_Activate ΠΈ CertificateExpireDate_Threshold_Deactivate, Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ количСство измСрвания (Samples) 1 (ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π·Π° Ρ‚ΠΎΠ·ΠΈ брояч няма смисъл Π΄Π° сС Π·Π°Π΄Π°Π²Π°Ρ‚ ΠΏΠΎΠ²Π΅Ρ‡Π΅), стойност 30 (Π΄Π½ΠΈ), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π²Π°ΠΆΠ½ΠΎ, настройвамС Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅ Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ. Π—Π° сСртификати Π² продукция Π·Π°Π΄Π°Π²Π°ΠΌ вСднъТ Π½Π° Π΄Π΅Π½ (86400 сСкунди), ΠΈΠ½Π°Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° сС ΠΏΠΎΡ‚ΠΎΠΏΠΈΠΌ Π² извСстия (ΠΊΠΎΠ΅Ρ‚ΠΎ, ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, вСднъТ сС случи, ΠΈ Ρ‚ΠΎ Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ пощСнската кутия ΠΏΡ€Π΅Π»ΠΈΠ²Π°ΡˆΠ΅ ΠΏΡ€Π΅Π· ΡƒΠΈΠΊΠ΅Π½Π΄Π°). Π—Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈΠΌΠ° смисъл Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ, 60 сСкунди, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

3. Π’ Action Configuration създавамС шаблон Π·Π° ΡƒΠ²Π΅Π΄ΠΎΠΌΠΈΡ‚Π΅Π»Π½ΠΈ ΠΈΠΌΠ΅ΠΉΠ»ΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° Ρ‚ΠΎΠ·ΠΈ:

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° срока Π½Π° дСйствиС Π½Π° сСртификатитС Π² Windows Π½Π° NetXMS

Всички Ρ‚Π΅Π·ΠΈ %m, %S ΠΈ Ρ‚.Π½. β€” макроси, Π² ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ подставСни стойности ΠΎΡ‚ нашия ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ Π·Π° тях са описани Π² ΠΌΠ°Π½ΡƒΠ°Π»Π° NetXMS.

4. И, накрая, ΡΡŠΡ‡Π΅Ρ‚Π°Π²Π°ΠΉΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ, Π² Event Processing Policy създавамС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΠΎ ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ сС създава Alarm ΠΈ Ρ‰Π΅ сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΠΈΠΌΠ΅ΠΉΠ»:

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° срока Π½Π° дСйствиС Π½Π° сСртификатитС Π² Windows Π½Π° NetXMS

Π—Π°ΠΏΠ°Π·Π²Π°ΠΌΠ΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π°, всичко Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° тСствамС. Π©Π΅ Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΏΠΎ-висок ΠΏΡ€Π°Π³ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°. Най-близкият ΠΌΠΈ сСртификат ΠΈΠ·Ρ‚ΠΈΡ‡Π° слСд 723 Π΄Π½ΠΈ, Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π°Π΄Π°Π΄ΠΎΡ… 724. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Ρ‚Π°ΠΊΡŠΠ² Π°Π»Π°Ρ€ΠΌ:

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° срока Π½Π° дСйствиС Π½Π° сСртификатитС Π² Windows Π½Π° NetXMS

ΠΈ Ρ‚Π°ΠΊΠΎΠ²Π° ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΈΠΌΠ΅ΠΉΠ»:

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° срока Π½Π° дСйствиС Π½Π° сСртификатитС Π² Windows Π½Π° NetXMS

Π•Ρ‚ΠΎ, сСга наистина всичко. МоТСшС Π΄Π° сС настрои Ρ‚Π°Π±Π»ΠΎ, Π΄Π° сС построят Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, Π½ΠΎ Π·Π° сСртификати Ρ‚ΠΎΠ²Π° Π±ΠΈΡ…Π° Π±ΠΈΠ»ΠΈ няколко бСзсмислСни ΠΈ скучни ΠΏΡ€Π°Π²ΠΈ Π»ΠΈΠ½ΠΈΠΈ, Π² контСкста Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π·Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° процСсора ΠΈΠ»ΠΈ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Но, Π·Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π΄Ρ€ΡƒΠ³ ΠΏΡŠΡ‚.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster