์ต๊ทผ ์ฐ๋ฆฌ๋ Windows ์๋ฒ์์ ์ธ์ฆ์์ ์ ํจ ๊ธฐ๊ฐ์ ๋ชจ๋ํฐ๋งํ๋ ์์ ์ ์ง๋ฉดํ์ต๋๋ค. ๊ธ์์, ์ธ์ฆ์ ๊ฐฑ์ ์ ๋ด๋นํ๋ ์์ผ ๋ ๋๋ฃ๊ฐ ํด๊ฐ ์ค์ด๋ ๋ฐ๋ก ๊ทธ ์๊ฐ ์ธ์ฆ์๊ฐ ํธ๋ฐ์ผ๋ก ์ฌ๋ฌ ๋ฒ ๋ณํ ํ ์ด๋ป๊ฒ ์ผ์ด๋ฌ์ต๋๊น? ๊ทธ ํ ๊ทธ์ ๋๋ ๋ญ๊ฐ๋ฅผ ์์ฌํ๊ณ ๊ทธ๊ฒ์ ๋ํด ์๊ฐํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ฐ๋ฆฌ๋ NetXMS ๋ชจ๋ํฐ๋ง ์์คํ ์ ์ฒ์ฒํ ๊ตฌํํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ์์ ์ ์ ์ผํ ํ๋ณด๊ฐ ๋์์ต๋๋ค.
์ต์ข ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ํํ๋ก ๊ฒฐ๊ณผ๊ฐ ๋์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋ก์ธ์ค ์์ฒด๊ฐ ๊ณ์๋ฉ๋๋ค.
๊ฐ๋ค. NetXMS์๋ ์ธ์ฆ์ ๋ง๋ฃ์ ๋ํ ๊ธฐ๋ณธ ์ ๊ณต ์นด์ดํฐ๊ฐ ์์ผ๋ฏ๋ก ์ง์ ๋ง๋ค๊ณ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค. ๋ฌผ๋ก Powershell์์๋ Windows์
๋๋ค. ์คํฌ๋ฆฝํธ๋ ์ด์ ์ฒด์ ์ ๋ชจ๋ ์ธ์ฆ์๋ฅผ ์ฝ๊ณ ๊ฑฐ๊ธฐ์์ ๋ง๋ฃ ๋ ์ง(์ผ)๋ฅผ ๊ฐ์ ธ์ ์ด ์ซ์๋ฅผ NetXMS์ ์ ๋ฌํด์ผ ํฉ๋๋ค. ๊ทธ์ ๋๋ฆฌ์ธ์ ํตํด. ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์์ํ ๊ณณ์
๋๋ค.
์ต์ ํ๋, ๊ฐ์ฅ ๊ฐ๋จํฉ๋๋ค. ์ธ์ฆ์ ๋ง๋ฃ์ผ๊น์ง ๋จ์ ์ผ์๋ฅผ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ์ง๋ก ๊ฐ๋จํ ์์๋ณด์ธ์.
NetXMS ์๋ฒ๊ฐ ์ฌ์ฉ์ ์ ์ ๋งค๊ฐ๋ณ์์ ์กด์ฌ๋ฅผ ์๊ธฐ ์ํด์๋ ์์ด์ ํธ๋ก๋ถํฐ ์ด๋ฅผ ์์ ํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ด ๋งค๊ฐ๋ณ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์์ด์ ํธ ๊ตฌ์ฑ ํ์ผ์์ nxagentd.conf ๋ค์๊ณผ ๊ฐ์ ์ธ๋ถ ๋งค๊ฐ๋ณ์ ๋ฌธ์์ด์ ์ถ๊ฐํฉ๋๋ค. HTTPS.CertificateExpireDateSimple, ์ฌ๊ธฐ์ ์คํฌ๋ฆฝํธ ์คํ์ ๋ฑ๋กํฉ๋๋ค.
ExternalParameter = HTTPS.CertificateExpireDateSimple: powershell.exe -File "servershareNetXMS_CertExpireDateSimple.ps1"
์คํฌ๋ฆฝํธ๊ฐ ๋คํธ์ํฌ๋ฅผ ํตํด ์คํ๋๋ค๋ ์ ์ ๊ณ ๋ คํ๋ฉด ๋ค์ ์ฌํญ์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์์ด์ ํธ ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
#
# 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
}
๋ค์๊ณผ ๊ฐ์ด ๋ฐํ์ก์ต๋๋ค.
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.์ธ์ฆ์๋ง๋ฃ์ผ(*) ๋ชฉ๋ก์์ (์ฃผ์!) ๋ณํ๋ฅผ ๋ค์์ผ๋ก ๋ณ๊ฒฝํ์ธ์. {์ฌ๋ก}. ์ด ์ค์ํ ์ ์ ํตํด ๊ฐ ์ธ์คํด์ค(์ธ์ฆ์)์ ๋ํด ๋ณ๋์ ์นด์ดํฐ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋๋จธ์ง๋ ์ด์ ๋ฒ์ ๊ณผ ๊ฐ์ด ์ฑ์์ง๋๋ค.
์นด์ดํฐ๋ฅผ ์์ฑํ ํญ๋ชฉ์ ์ป์ผ๋ ค๋ฉด ์ธ์คํด์ค ๊ฒ์ ํญ์ ๋ชฉ๋ก์์ ์์ด์ ํธ ๋ชฉ๋ก์ ์ ํํ๊ณ ๋ชฉ๋ก ์ด๋ฆ ํ๋์ ์คํฌ๋ฆฝํธ์ ์ธ๋ถ ๋ชฉ๋ก ์ด๋ฆ(HTTPS.CertificateNames)์ ์
๋ ฅํด์ผ ํฉ๋๋ค.
๊ฑฐ์ ์ค๋น๊ฐ ๋์์ต๋๋ค. ์กฐ๊ธ ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋, ์์ ํ ๊ธฐ๋ค๋ฆด ์ ์๋ ๊ฒฝ์ฐ Poll > Configuration ๋ฐ Poll > Instance Discovery๋ฅผ ๊ฐ์ ์คํํ์ธ์. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ์ ํจ ๊ธฐ๊ฐ์ด ์๋ ๋ชจ๋ ์ธ์ฆ์๋ฅผ ์ป์ต๋๋ค.
๋ญ๊ฐ ํ์ํ์ธ์? ๊ธ์, ๋ค, ์๋ฒฝ์ฃผ์์ ๋ฒ๋ ๋ง์ด ์นด์ดํฐ ์ด๋ฆ์ผ๋ก ์ฌํ ๋์ผ๋ก ์ด ๋ถํ์ํ ์ง๋ฌธ์ ๋ฐ๋ผ๋ณด๋ฉฐ ๊ธฐ์ฌ๋ฅผ ๋๋ด์ง ๋ชปํ๊ฒ ํฉ๋๋ค. ์ด๋ฅผ ๊ณต๊ธํ๋ ค๋ฉด ์นด์ดํฐ ์์ฑ์ ๋ค์ ์ด๊ณ ์ธ์คํด์ค ๊ฒ์ ํญ์ "์ธ์คํด์ค ๊ฒ์ ํํฐ ์คํฌ๋ฆฝํธ" ํ๋์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑ๋ ํญ๋ชฉ์ ์ถ๊ฐํ์ธ์.
instance = $1;
if (instance ~= "^(.*)s-s[T:[a-zA-Z0-9]+]$")
{
return %(true, instance, $1);
}
return true;
์ด๋ ์ง๋ฌธ์ ํํฐ๋งํฉ๋๋ค.
ํํฐ๋ง๋ ๋ด์ฉ์ ํ์ํ๋ ค๋ฉด ์ผ๋ฐ ํญ์ ์ค๋ช
ํ๋์์ CertificateExpireDate: {instance}๋ฅผ ๋ค์์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค. ์ธ์ฆ์ ๋ง๋ฃ ๋ ์ง: {์ธ์คํด์ค ์ด๋ฆ}:
์ด๊ฒ์ด ๋ฐ๋ก KDPV์ ๊ฒฐ์น์ ์
๋๋ค.
์๋ฆ๋ค์์ธ๊ฐ?
๋จ์ ์ผ์ ์ธ์ฆ์๊ฐ ๋ง๋ฃ๋ ๋ ์ด๋ฉ์ผ๋ก ๋์ฐฉํ๋๋ก ๊ฒฝ๊ณ ๋ฅผ ์ค์ ํ๋ ๊ฒ์ ๋๋ค.
1. ๋จผ์ ์นด์ดํฐ ๊ฐ์ด ์ค์ ํ ์๊ณ๊ฐ์ผ๋ก ๊ฐ์ํ ๋ ํ์ฑํํ ์ด๋ฒคํธ ํ ํ๋ฆฟ์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์์ ์ด๋ฒคํธ ๊ตฌ์ฑ ๋ค์๊ณผ ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ๋ ๊ฐ์ ์ ํ ํ๋ฆฟ์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ์ธ์ฆ์ExpireDate_Threshold_Activate ๊ฒฝ๊ณ ์ํ:
๋ฐ ์ด์ ์ ์ฌํ ์ธ์ฆ์ExpireDate_Threshold_Deactivate ์ ์ ์ํ.
2. ๊ทธ๋ฐ ๋ค์ ์นด์ดํฐ ์์ฑ์ผ๋ก ์ด๋ํ์ฌ ์๊ณ๊ฐ ํญ์์ ์๊ณ๊ฐ์ ์ค์ ํฉ๋๋ค.
์ฌ๊ธฐ์ ์์ฑ๋ ์ด๋ฒคํธ CertificateExpireDate_Threshold_Activate ๋ฐ CertificateExpireDate_Threshold_Deactivate๋ฅผ ์ ํํ๊ณ ์ํ ์(Samples)๋ฅผ 1๋ก ์ค์ ํฉ๋๋ค(ํนํ ์ด ์นด์ดํฐ์ ๊ฒฝ์ฐ ๋ ์ด์ ์ค์ ํ ํ์๊ฐ ์์). ์๋ฅผ ๋ค์ด ๊ฐ์ 30(์ผ)์
๋๋ค. ์ด๋ฒคํธ ๋ฐ๋ณต ์๊ฐ. ํ๋ก๋์
์ธ์ฆ์์ ๊ฒฝ์ฐ ํ๋ฃจ์ ํ ๋ฒ(86400์ด) ์ค์ ํ์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ฆผ์ ๋น ์ ธ๋ค ์ ์์ต๋๋ค(๊ทธ๋ฐ๋ฐ ํ ๋ฒ ๋ฐ์ํ์ฌ ์ฃผ๋ง ๋์ ์ฌ์ํจ์ด ๊ฐ๋ ์ฐผ์ต๋๋ค). ๋๋ฒ๊น
์๊ฐ์ ๊ฒฝ์ฐ ์๋ฅผ ๋ค์ด 60์ด์ฒ๋ผ ๋ฎ๊ฒ ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
3. ์์ ์ก์ ๊ตฌ์ฑ ๋ค์๊ณผ ๊ฐ์ด ์๋ฆผ ํธ์ง ํ ํ๋ฆฟ์ ๋ง๋ญ๋๋ค.
%m, %S ๋ฑ์ด ๋ชจ๋ ํด๋น๋ฉ๋๋ค. โ ๋งค๊ฐ๋ณ์์ ๊ฐ์ด ๋์ฒด๋ ๋งคํฌ๋ก์
๋๋ค. ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์
4. ๋ง์ง๋ง์ผ๋ก ์ด์ ์์ ์ ๊ฒฐํฉํ์ฌ ์ด๋ฒคํธ ์ฒ๋ฆฌ ์ ์ฑ ์๋์ด ์์ฑ๋๊ณ ํธ์ง๊ฐ ์ ์ก๋๋ ๊ท์น์ ๋ง๋ญ๋๋ค.
์ ์ฑ ์ ์ ์ฅํ๋ฉด ๋ชจ๋ ๊ฒ์ ํ ์คํธํ ์ ์์ต๋๋ค. ํ์ธํ๊ธฐ ์ํด ์๊ณ๊ฐ์ ๋ ๋๊ฒ ์ค์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ฐ์ฅ ๊ฐ๊น์ด ์ธ์ฆ์๊ฐ 723์ผ ํ์ ๋ง๋ฃ๋๋ฏ๋ก ํ์ธํ๊ธฐ ์ํด 724๋ก ์ค์ ํ ๊ฒฐ๊ณผ ๋ค์๊ณผ ๊ฐ์ ์๋์ด ๋ฐ์ํฉ๋๋ค.
์ด ์ด๋ฉ์ผ ์๋ฆผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด์ ๊ทธ๊ฒ ์ ๋ถ์
๋๋ค. ๋ฌผ๋ก ๋์๋ณด๋๋ฅผ ์ค์ ํ๊ณ ๊ทธ๋ํ๋ฅผ ์์ฑํ๋ ๊ฒ๋ ๊ฐ๋ฅํ์ง๋ง ์ธ์ฆ์์ ๊ฒฝ์ฐ ์ด๋ ์๋ฅผ ๋ค์ด ํ๋ก์ธ์๋ ๋ฉ๋ชจ๋ฆฌ ๋ก๋ ๊ทธ๋ํ์๋ ๋ฌ๋ฆฌ ๋ค์ ์๋ฏธ๊ฐ ์๊ณ ์ง๋ฃจํ ์ง์ ์ผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋ํด์๋ ๋์ค์ ๋ ์์ธํ ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
์ถ์ฒ : habr.com