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 ์ฝ˜์†”์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ(์—์ด์ „ํŠธ ๊ตฌ์„ฑ ํŒŒ์ผ ํŽธ์ง‘)์„ ์—ด๊ณ  ํŽธ์ง‘ํ•˜๊ณ  ์ €์žฅ ๋ฐ ์ ์šฉ์„ ์‹คํ–‰ํ•˜๋ฉด ์‹ค์ œ๋กœ ๋™์ผํ•œ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ „ํ˜€ ๊ธฐ๋‹ค๋ฆด ํž˜์ด ์—†๋‹ค๋ฉด ๊ตฌ์„ฑ(Poll > Configuration)์„ ๋‹ค์‹œ ์ฝ์œผ์‹ญ์‹œ์˜ค. ์ด ๋‹จ๊ณ„ ํ›„์—๋Š” ๋งž์ถค ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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์ผ, ์ธ์ฆ์„œ ๋งŒ๋ฃŒ๊นŒ์ง€ ๊ฑฐ์˜ XNUMX๋…„ ๋‚จ์•˜์Šต๋‹ˆ๋‹ค. ์•„์ฃผ ์ตœ๊ทผ์— 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.์ธ์ฆ์„œ๋งŒ๋ฃŒ์ผ(*) ๋ชฉ๋ก์—์„œ (์ฃผ์˜!) ๋ณ„ํ‘œ๋ฅผ ๋‹ค์Œ์œผ๋กœ ๋ณ€๊ฒฝํ•˜์„ธ์š”. {์‚ฌ๋ก€}. ์ด ์ค‘์š”ํ•œ ์ ์„ ํ†ตํ•ด ๊ฐ ์ธ์Šคํ„ด์Šค(์ธ์ฆ์„œ)์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ์นด์šดํ„ฐ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€๋Š” ์ด์ „ ๋ฒ„์ „๊ณผ ๊ฐ™์ด ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

NetXMS์˜ Windows์—์„œ ์ธ์ฆ์„œ ๋งŒ๋ฃŒ ๋‚ ์งœ ๋ชจ๋‹ˆํ„ฐ๋ง

์นด์šดํ„ฐ๋ฅผ ์ƒ์„ฑํ•  ํ•ญ๋ชฉ์„ ์–ป์œผ๋ ค๋ฉด ์ธ์Šคํ„ด์Šค ๊ฒ€์ƒ‰ ํƒญ์˜ ๋ชฉ๋ก์—์„œ ์—์ด์ „ํŠธ ๋ชฉ๋ก์„ ์„ ํƒํ•˜๊ณ  ๋ชฉ๋ก ์ด๋ฆ„ ํ•„๋“œ์— ์Šคํฌ๋ฆฝํŠธ์˜ ์™ธ๋ถ€ ๋ชฉ๋ก ์ด๋ฆ„(HTTPS.CertificateNames)์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฑฐ์˜ ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์กฐ๊ธˆ ๊ธฐ๋‹ค๋ฆฌ๊ฑฐ๋‚˜, ์™„์ „ํžˆ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ Poll > Configuration ๋ฐ Poll > Instance Discovery๋ฅผ ๊ฐ•์ œ ์‹คํ–‰ํ•˜์„ธ์š”. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์œ ํšจ ๊ธฐ๊ฐ„์ด ์žˆ๋Š” ๋ชจ๋“  ์ธ์ฆ์„œ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

NetXMS์˜ Windows์—์„œ ์ธ์ฆ์„œ ๋งŒ๋ฃŒ ๋‚ ์งœ ๋ชจ๋‹ˆํ„ฐ๋ง

๋ญ๊ฐ€ ํ•„์š”ํ•˜์„ธ์š”? ๊ธ€์Ž„, ๋„ค, ์™„๋ฒฝ์ฃผ์˜์˜ ๋ฒŒ๋ ˆ๋งŒ์ด ์นด์šดํ„ฐ ์ด๋ฆ„์œผ๋กœ ์Šฌํ”ˆ ๋ˆˆ์œผ๋กœ ์ด ๋ถˆํ•„์š”ํ•œ ์ง€๋ฌธ์„ ๋ฐ”๋ผ๋ณด๋ฉฐ ๊ธฐ์‚ฌ๋ฅผ ๋๋‚ด์ง€ ๋ชปํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ณต๊ธ‰ํ•˜๋ ค๋ฉด ์นด์šดํ„ฐ ์†์„ฑ์„ ๋‹ค์‹œ ์—ด๊ณ  ์ธ์Šคํ„ด์Šค ๊ฒ€์ƒ‰ ํƒญ์˜ "์ธ์Šคํ„ด์Šค ๊ฒ€์ƒ‰ ํ•„ํ„ฐ ์Šคํฌ๋ฆฝํŠธ" ํ•„๋“œ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑ๋œ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”. NXSL (NetXMS ๋‚ด๋ถ€ ์–ธ์–ด) ์Šคํฌ๋ฆฝํŠธ:

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

์ด๋Š” ์ง€๋ฌธ์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

NetXMS์˜ Windows์—์„œ ์ธ์ฆ์„œ ๋งŒ๋ฃŒ ๋‚ ์งœ ๋ชจ๋‹ˆํ„ฐ๋ง

ํ•„ํ„ฐ๋ง๋œ ๋‚ด์šฉ์„ ํ‘œ์‹œํ•˜๋ ค๋ฉด ์ผ๋ฐ˜ ํƒญ์˜ ์„ค๋ช… ํ•„๋“œ์—์„œ CertificateExpireDate: {instance}๋ฅผ ๋‹ค์Œ์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ์„œ ๋งŒ๋ฃŒ ๋‚ ์งœ: {์ธ์Šคํ„ด์Šค ์ด๋ฆ„}:

NetXMS์˜ Windows์—์„œ ์ธ์ฆ์„œ ๋งŒ๋ฃŒ ๋‚ ์งœ ๋ชจ๋‹ˆํ„ฐ๋ง

์ด๊ฒƒ์ด ๋ฐ”๋กœ KDPV์˜ ๊ฒฐ์Šน์„ ์ž…๋‹ˆ๋‹ค.

NetXMS์˜ Windows์—์„œ ์ธ์ฆ์„œ ๋งŒ๋ฃŒ ๋‚ ์งœ ๋ชจ๋‹ˆํ„ฐ๋ง

์•„๋ฆ„๋‹ค์›€์ธ๊ฐ€?

๋‚จ์€ ์ผ์€ ์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋  ๋•Œ ์ด๋ฉ”์ผ๋กœ ๋„์ฐฉํ•˜๋„๋ก ๊ฒฝ๊ณ ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

1. ๋จผ์ € ์นด์šดํ„ฐ ๊ฐ’์ด ์„ค์ •ํ•œ ์ž„๊ณ„๊ฐ’์œผ๋กœ ๊ฐ์†Œํ•  ๋•Œ ํ™œ์„ฑํ™”ํ•  ์ด๋ฒคํŠธ ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•ˆ์— ์ด๋ฒคํŠธ ๊ตฌ์„ฑ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋‘ ๊ฐœ์˜ ์ƒˆ ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ธ์ฆ์„œExpireDate_Threshold_Activate ๊ฒฝ๊ณ  ์ƒํƒœ:

NetXMS์˜ Windows์—์„œ ์ธ์ฆ์„œ ๋งŒ๋ฃŒ ๋‚ ์งœ ๋ชจ๋‹ˆํ„ฐ๋ง

๋ฐ ์ด์™€ ์œ ์‚ฌํ•œ ์ธ์ฆ์„œExpireDate_Threshold_Deactivate ์ •์ƒ ์ƒํƒœ.

2. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์นด์šดํ„ฐ ์†์„ฑ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ์ž„๊ณ„๊ฐ’ ํƒญ์—์„œ ์ž„๊ณ„๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

NetXMS์˜ Windows์—์„œ ์ธ์ฆ์„œ ๋งŒ๋ฃŒ ๋‚ ์งœ ๋ชจ๋‹ˆํ„ฐ๋ง

์—ฌ๊ธฐ์„œ ์ƒ์„ฑ๋œ ์ด๋ฒคํŠธ CertificateExpireDate_Threshold_Activate ๋ฐ CertificateExpireDate_Threshold_Deactivate๋ฅผ ์„ ํƒํ•˜๊ณ  ์ƒ˜ํ”Œ ์ˆ˜(Samples)๋ฅผ 1๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค(ํŠนํžˆ ์ด ์นด์šดํ„ฐ์˜ ๊ฒฝ์šฐ ๋” ์ด์ƒ ์„ค์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Œ). ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ’์€ 30(์ผ)์ž…๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ๋ฐ˜๋ณต ์‹œ๊ฐ„. ํ”„๋กœ๋•์…˜ ์ธ์ฆ์„œ์˜ ๊ฒฝ์šฐ ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ(86400์ดˆ) ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์•Œ๋ฆผ์— ๋น ์ ธ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฐ๋ฐ ํ•œ ๋ฒˆ ๋ฐœ์ƒํ•˜์—ฌ ์ฃผ๋ง ๋™์•ˆ ์‚ฌ์„œํ•จ์ด ๊ฐ€๋“ ์ฐผ์Šต๋‹ˆ๋‹ค). ๋””๋ฒ„๊น… ์‹œ๊ฐ„์˜ ๊ฒฝ์šฐ ์˜ˆ๋ฅผ ๋“ค์–ด 60์ดˆ์ฒ˜๋Ÿผ ๋‚ฎ๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

3. ์žˆ์Œ ์•ก์…˜ ๊ตฌ์„ฑ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•Œ๋ฆผ ํŽธ์ง€ ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

NetXMS์˜ Windows์—์„œ ์ธ์ฆ์„œ ๋งŒ๋ฃŒ ๋‚ ์งœ ๋ชจ๋‹ˆํ„ฐ๋ง

%m, %S ๋“ฑ์ด ๋ชจ๋‘ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. โ€” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋Œ€์ฒด๋  ๋งคํฌ๋กœ์ž…๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ˆ˜๋™ NetXMS.

4. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ด์ „ ์š”์ ์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์ •์ฑ… ์•Œ๋žŒ์ด ์ƒ์„ฑ๋˜๊ณ  ํŽธ์ง€๊ฐ€ ์ „์†ก๋˜๋Š” ๊ทœ์น™์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

NetXMS์˜ Windows์—์„œ ์ธ์ฆ์„œ ๋งŒ๋ฃŒ ๋‚ ์งœ ๋ชจ๋‹ˆํ„ฐ๋ง

์ •์ฑ…์„ ์ €์žฅํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ž„๊ณ„๊ฐ’์„ ๋” ๋†’๊ฒŒ ์„ค์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ธ์ฆ์„œ๊ฐ€ 723์ผ ํ›„์— ๋งŒ๋ฃŒ๋˜๋ฏ€๋กœ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด 724๋กœ ์„ค์ •ํ•œ ๊ฒฐ๊ณผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์•Œ๋žŒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

NetXMS์˜ Windows์—์„œ ์ธ์ฆ์„œ ๋งŒ๋ฃŒ ๋‚ ์งœ ๋ชจ๋‹ˆํ„ฐ๋ง

์ด ์ด๋ฉ”์ผ ์•Œ๋ฆผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

NetXMS์˜ Windows์—์„œ ์ธ์ฆ์„œ ๋งŒ๋ฃŒ ๋‚ ์งœ ๋ชจ๋‹ˆํ„ฐ๋ง

์ด์ œ ๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ทธ๋ž˜ํ”„๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ธ์ฆ์„œ์˜ ๊ฒฝ์šฐ ์ด๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ํ”„๋กœ์„ธ์„œ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ๋กœ๋“œ ๊ทธ๋ž˜ํ”„์™€๋Š” ๋‹ฌ๋ฆฌ ๋‹ค์†Œ ์˜๋ฏธ๊ฐ€ ์—†๊ณ  ์ง€๋ฃจํ•œ ์ง์„ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์— ๋Œ€ํ•ด์„œ๋Š” ๋‚˜์ค‘์— ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€