சமீபத்தில் விண்டோஸ் சர்வர்களில் சான்றிதழ்களின் செல்லுபடியாகும் காலத்தை கண்காணிக்கும் பணியை நாங்கள் எதிர்கொண்டோம். சரி, சான்றிதழ்கள் பல முறை பூசணிக்காயாக மாறிய பிறகு நான் எப்படி எழுந்தேன், அவற்றின் புதுப்பித்தலுக்குப் பொறுப்பான தாடி வைத்த சக ஊழியர் விடுமுறையில் இருந்த நேரத்தில். அதன் பிறகு நானும் அவரும் ஏதோ சந்தேகப்பட்டு யோசிக்க முடிவு செய்தோம். நாங்கள் மெதுவாக NetXMS கண்காணிப்பு முறையை செயல்படுத்தி வருவதால், இது முக்கிய மற்றும் கொள்கையளவில் இந்த பணிக்கான ஒரே வேட்பாளராக மாறியுள்ளது.
முடிவு இறுதியாக பின்வரும் வடிவத்தில் பெறப்பட்டது:
மற்றும் செயல்முறை தன்னை தொடர்கிறது.
போ. NetXMS இல் காலாவதியாகும் சான்றிதழ்களுக்கு உள்ளமைக்கப்பட்ட கவுண்டர் இல்லை, எனவே நீங்கள் சொந்தமாக உருவாக்கி, தரவை வழங்க ஸ்கிரிப்ட்களைப் பயன்படுத்த வேண்டும். நிச்சயமாக, பவர்ஷெலில், இது விண்டோஸ். ஸ்கிரிப்ட் இயக்க முறைமையில் உள்ள அனைத்து சான்றிதழ்களையும் படித்து, அதன் காலாவதி தேதியை சில நாட்களில் எடுத்து, இந்த எண்ணை NetXMS க்கு அனுப்ப வேண்டும். அவரது முகவர் மூலம். அங்குதான் தொடங்குவோம்.
விருப்பம் ஒன்று, எளிமையானது. சான்றிதழின் காலாவதி தேதி வரை உள்ள நாட்களின் எண்ணிக்கையை அருகிலுள்ள தேதியுடன் பெறவும்.
எங்கள் தனிப்பயன் அளவுருவின் இருப்பைப் பற்றி NetXMS சேவையகம் அறிய, அது அதை ஏஜென்டிடமிருந்து பெற வேண்டும். இல்லையெனில், இந்த அளவுரு இல்லாததால் சேர்க்க முடியாது. எனவே, முகவர் கட்டமைப்பு கோப்பில் nxagend.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 கன்சோலில் இருந்து இதைச் செய்யலாம்: கட்டமைப்பைத் திறக்கவும் (முகவரின் உள்ளமைவு கோப்பைத் திருத்தவும்), அதைத் திருத்தவும், சேமி&பயன்படுத்தவும், இதன் விளைவாக, உண்மையில் அதே விஷயம் நடக்கும். காத்திருப்பதற்கான வலிமை உங்களிடம் இல்லையென்றால், உள்ளமைவை (வாக்கெடுப்பு > உள்ளமைவு) மீண்டும் படிக்கவும். இந்த படிகளுக்குப் பிறகு, நீங்கள் எங்கள் தனிப்பயன் அளவுருவைச் சேர்க்க முடியும்.
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 நாட்கள், சான்றிதழ் காலாவதியாகும் வரை கிட்டத்தட்ட இரண்டு ஆண்டுகள் உள்ளன. இது தர்க்கரீதியானது, ஏனென்றால் எக்ஸ்சேஞ்ச் டெஸ்ட் பெஞ்சிற்கான சான்றிதழ்களை நான் சமீபத்தில் மீண்டும் வழங்கியுள்ளேன்.
இது எளிதான விருப்பமாக இருந்தது. ஒருவேளை, யாராவது இதில் திருப்தி அடைவார்கள், ஆனால் நாங்கள் இன்னும் அதிகமாக விரும்புகிறோம். சர்வரில் உள்ள அனைத்து சான்றிதழ்களின் பட்டியலைப் பெறுவதற்கும், ஒவ்வொருவருக்கும் சான்றிதழ் காலாவதியாகும் வரை மீதமுள்ள நாட்களின் எண்ணிக்கையைப் பார்ப்பதற்கும் பணியை நாமே அமைத்துக்கொள்கிறோம்.
இரண்டாவது விருப்பம், சற்று சிக்கலானது.
மீண்டும் முகவர் கட்டமைப்பைத் திருத்துகிறோம், 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)"
}
}
மற்றும் ஏற்கனவே உள்ளே வெளிப்புற அளவுரு எக்ஸ்டர்னல்லிஸ்ட் பட்டியலிலிருந்து வரிசைகளை உள்ளிடுகிறோம், வெளியீட்டில் ஒவ்வொன்றிற்கும் ஒரே எண்ணிக்கையிலான நாட்களைப் பெறுவோம். அடையாளங்காட்டி என்பது சான்றிதழின் கட்டைவிரல் ரேகை. HTTPS.CertificateExpireDate இந்த மாறுபாட்டில் ஒரு நட்சத்திரம் (*) உள்ளது என்பதை நினைவில் கொள்ளவும். வெளிப்புற மாறிகளை ஏற்றுக்கொள்வதற்கு இது அவசியம், எங்கள் சான்றிதழ் ஐடி மட்டும்.
ஸ்கிரிப்ட் 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.சான்றிதழ் காலாவதியாகும் தேதி(*) பட்டியலில் இருந்து, மற்றும் (கவனம்!) நட்சத்திரத்தை மாற்றவும் {instance}. இந்த முக்கியமான புள்ளி, ஒவ்வொரு நிகழ்விற்கும் (சான்றிதழ்) ஒரு தனி கவுண்டரை உருவாக்க உங்களை அனுமதிக்கும். மீதமுள்ளவை முந்தைய பதிப்பைப் போலவே நிரப்பப்பட்டுள்ளன:
ஏதாவது கவுண்டர்களை உருவாக்க, இன்ஸ்டன்ஸ் டிஸ்கவரி தாவலில் நீங்கள் பட்டியலிலிருந்து ஏஜென்ட் பட்டியலைத் தேர்ந்தெடுக்க வேண்டும் மற்றும் பட்டியல் பெயர் புலத்தில் ஸ்கிரிப்ட் - HTTPS.CertificateNames இலிருந்து எங்கள் ExternalList இன் பெயரை உள்ளிடவும்.
கிட்டத்தட்ட தயாராக உள்ளது, சிறிது காத்திருக்கவும் அல்லது காத்திருப்பது முற்றிலும் சாத்தியமற்றது என்றால், வாக்கெடுப்பு > உள்ளமைவு மற்றும் கருத்துக்கணிப்பு > நிகழ்வு கண்டுபிடிப்பை கட்டாயப்படுத்தவும். இதன் விளைவாக, செல்லுபடியாகும் காலங்களுடன் எங்களின் அனைத்து சான்றிதழ்களையும் பெறுகிறோம்:
உனக்கு என்ன வேண்டும்? சரி, ஆம், பர்ஃபெக்ஷனிசம் என்ற புழு மட்டுமே, கவுண்டர் என்ற பெயரில் தேவையற்ற இந்தக் கட்டைவிரல் ரேகையை சோகமான கண்களுடன் பார்த்து, கட்டுரையை முடிக்க விடவில்லை. அதற்கு உணவளிக்க, கவுண்டர் பண்புகளை மீண்டும் திறந்து, இன்ஸ்டன்ஸ் டிஸ்கவரி தாவலில், "உதாரண கண்டுபிடிப்பு வடிகட்டி ஸ்கிரிப்ட்" புலத்தில், எழுதப்பட்டதைச் சேர்க்கவும்
instance = $1;
if (instance ~= "^(.*)s-s[T:[a-zA-Z0-9]+]$")
{
return %(true, instance, $1);
}
return true;
இது கட்டைவிரல் ரேகையை வடிகட்டுகிறது:
வடிகட்டப்பட்டதைக் காட்ட, விளக்கம் புலத்தில் உள்ள பொதுத் தாவலில், CertificateExpireDate: {instance} ஆக மாற்றவும் CertificateExpireDate: {instance-name}:
அவ்வளவுதான், இறுதியாக KDPV இலிருந்து பூச்சு வரி:
அழகு இல்லையா?
சான்றிதழ் காலாவதியாகும் போது மின்னஞ்சலில் வரும் வகையில் விழிப்பூட்டல்களை அமைப்பதே எஞ்சியுள்ளது.
1. முதலில் நாம் அமைத்த சில வரம்புகளுக்கு எதிர் மதிப்பு குறையும் போது அதை செயல்படுத்த ஒரு நிகழ்வு டெம்ப்ளேட்டை உருவாக்க வேண்டும். IN நிகழ்வு கட்டமைப்பு போன்ற பெயர்களுடன் இரண்டு புதிய டெம்ப்ளேட்களை உருவாக்குவோம் CertificateExpireDate_Threshold_Activate எச்சரிக்கை நிலையுடன்:
மற்றும் ஒத்த CertificateExpireDate_Threshold_Deactivate இயல்பான நிலையுடன்.
2. அடுத்து, கவுண்டர் பண்புகளுக்குச் சென்று, ட்ரெஷோல்ட்ஸ் தாவலில் நுழைவாயிலை அமைக்கவும்:
நாங்கள் உருவாக்கிய நிகழ்வுகள் CertificateExpireDate_Threshold_Activate மற்றும் CertificateExpireDate_Threshold_Deactivate ஆகியவற்றைத் தேர்ந்தெடுக்கும்போது, மாதிரிகளின் எண்ணிக்கையை (மாதிரிகள்) 1 ஆக அமைக்கவும் (குறிப்பாக இந்தக் கவுண்டருக்கு மேலும் அமைப்பதில் அர்த்தமில்லை), மதிப்பு 30 (நாட்கள்), எடுத்துக்காட்டாக, முக்கியமாக அமைக்கவும் நிகழ்வு மீண்டும் நிகழும் நேரம். உற்பத்தியில் உள்ள சான்றிதழ்களுக்கு, நான் அதை ஒரு நாளைக்கு ஒரு முறை (86400 வினாடிகள்) அமைத்தேன், இல்லையெனில் நீங்கள் அறிவிப்புகளில் மூழ்கலாம் (இது ஒரு முறை நடந்தது, வார இறுதியில் அஞ்சல் பெட்டி நிரம்பியது). பிழைத்திருத்த நேரத்திற்கு, எடுத்துக்காட்டாக, 60 வினாடிகள் குறைவாக அமைப்பது அர்த்தமுள்ளதாக இருக்கிறது.
3. தி செயல் கட்டமைப்பு இது போன்ற ஒரு அறிவிப்பு கடிதம் டெம்ப்ளேட்டை உருவாக்கவும்:
இவை அனைத்தும் %m, %S போன்றவை. — எங்கள் அளவுருவிலிருந்து மதிப்புகள் மாற்றப்படும் மேக்ரோக்கள். அவை இன்னும் விரிவாக விவரிக்கப்பட்டுள்ளன
4. இறுதியாக, முந்தைய புள்ளிகளை இணைத்தல் நிகழ்வு செயலாக்கக் கொள்கை ஒரு அலாரம் உருவாக்கப்பட்டு ஒரு கடிதம் அனுப்பப்படும் விதியை உருவாக்கவும்:
நாங்கள் கொள்கையைச் சேமிக்கிறோம், எல்லாவற்றையும் சோதிக்க முடியும். சரிபார்க்க, வரம்பை அதிகமாக அமைப்போம். எனது அருகிலுள்ள சான்றிதழ் 723 நாட்களில் காலாவதியாகிறது, அதை சரிபார்க்க 724 என அமைத்தேன். இதன் விளைவாக, பின்வரும் அலாரத்தைப் பெறுகிறோம்:
மற்றும் இந்த மின்னஞ்சல் அறிவிப்பு:
இனி அவ்வளவுதான். நிச்சயமாக, ஒரு டாஷ்போர்டை அமைத்து வரைபடங்களை உருவாக்குவது சாத்தியமாகும், ஆனால் சான்றிதழ்களுக்கு இவை சற்றே அர்த்தமற்றதாகவும் சலிப்பூட்டும் நேர்கோடுகளாகவும் இருக்கும், எடுத்துக்காட்டாக, செயலி அல்லது நினைவக சுமை வரைபடங்களைப் போலல்லாமல். ஆனால், இதைப் பற்றி வேறு சில நேரம்.
ஆதாரம்: www.habr.com