सर्वर सर्टिफिकेट की अप्रत्याशित समाप्ति आपके उपयोगकर्ताओं और ग्राहकों के लिए कई समस्याएं पैदा कर सकती है: वे आपकी साइट के साथ सुरक्षित कनेक्शन स्थापित नहीं कर पाएंगे, प्रमाणीकरण एरर हो सकती हैं, ब्राउज़र में कष्टप्रद सूचनाएं दिखाई दे सकती हैं, आदि। इस लेख में हम दिखाएंगे कि रिमोट साइट्स पर SSL/TLS सर्टिफिकेट की समाप्ति तिथि कैसे जांचें, या अपने डोमेन में सर्वरों या कंप्यूटर्स पर लोकल सर्टिफिकेट स्टोर में समाप्त होने वाले सर्टिफिकेट की सूची कैसे प्राप्त करें।
PowerShell के साथ वेबसाइट SSL सर्टिफिकेट की समाप्ति तिथि प्राप्त करें
कई वेब प्रोजेक्ट HTTPS लागू करने के लिए मुफ्त Let's Encrypt SSL सर्टिफिकेट का उपयोग करते हैं। ये सर्टिफिकेट 90 दिनों के लिए जारी किए जाते हैं और नियमित रूप से नवीनीकृत होने चाहिए। आमतौर पर, विशेष स्क्रिप्ट या बॉट होस्टिंग या सर्वर साइड पर Let's Encrypt सर्टिफिकेट को अपडेट करते हैं (यह Windows में WACS या Linux में Certbot हो सकता है)। हालांकि, कभी-कभी स्वचालित सर्टिफिकेट नवीनीकरण विफल हो जाता है। मैं अपना खुद का स्क्रिप्ट रखना चाहूंगा जो वेबसाइट्स पर SSL सर्टिफिकेट समाप्ति तिथियों की जांच करे और जब वे समाप्त होने वाले हों तो मुझे सूचित करे। मैंने इसके लिए PowerShell का उपयोग किया। चूंकि हम HttpWeb क्वेरी के माध्यम से वेबसाइट के सर्टिफिकेट की जांच कर रहे हैं, हमें रिमोट वेबसाइट/सर्वर पर एडमिनिस्ट्रेटर विशेषाधिकारों की आवश्यकता नहीं है।
निम्न PowerShell स्क्रिप्ट में, आपको उन वेबसाइट्स की सूची निर्दिष्ट करनी होगी जिन पर आप सर्टिफिकेट समाप्ति तिथियों की जांच करना चाहते हैं और सर्टिफिकेट की वह आयु जब संबंधित सूचना आपको प्रदर्शित होने लगे ($minCertAge)। मैंने उदाहरण के रूप में 80 दिन दर्ज किए।
$minCertAge = 80
$timeoutMs = 10000
$sites = @(
"https://testsite1.com/",
"https://testsite2.com/",
"https://woshub.com/"
)
# Disable certificate validation
[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
foreach ($site in $sites)
{
Write-Host Check $site -f Green
$req = [Net.HttpWebRequest]::Create($site)
$req.Timeout = $timeoutMs
try {$req.GetResponse() |Out-Null} catch {Write-Host URL check error $site`: $_ -f Red}
$expDate = $req.ServicePoint.Certificate.GetExpirationDateString()
$certExpDate = [datetime]::ParseExact($expDate, “dd/MM/yyyy HH:mm:ss”, $null)
[int]$certExpiresIn = ($certExpDate - $(get-date)).Days
$certName = $req.ServicePoint.Certificate.GetName()
$certThumbprint = $req.ServicePoint.Certificate.GetCertHashString()
$certEffectiveDate = $req.ServicePoint.Certificate.GetEffectiveDateString()
$certIssuer = $req.ServicePoint.Certificate.GetIssuerName()
if ($certExpiresIn -gt $minCertAge)
{Write-Host The $site certificate expires in $certExpiresIn days [$certExpDate] -f Green}
else
{
$message= "The $site certificate expires in $certExpiresIn days"
$messagetitle= "Renew certificate"
Write-Host $message [$certExpDate]. Details:`n`nCert name: $certName`Cert thumbprint: $certThumbprint`nCert effective date: $certEffectiveDate`nCert issuer: $certIssuer -f Red
#Displays a pop-up notification and sends an email to the administrator
#ShowNotification $messagetitle $message
# Send-MailMessage -From powershell@woshub.com -To admin@woshub.com -Subject $messagetitle -body $message -SmtpServer gwsmtp.woshub.com -Encoding UTF8
}
write-host "________________" `n
}
यह PowerShell स्क्रिप्ट सूची में सभी वेबसाइट्स के SSL सर्टिफिकेट की जांच करेगी। यदि ऐसा सर्टिफिकेट मिलता है जो समाप्त होने वाला है, तो उसे सूचना में हाइलाइट किया जाएगा।
एडमिनिस्ट्रेटर को सूचित करने के लिए कि SSL सर्टिफिकेट समाप्त होने वाला है, आप पॉपअप सूचना जोड़ सकते हैं। ऐसा करने के लिए, स्क्रिप्ट लाइन "ShowNotification $messagetitle $message" को अनकमेंट करें और निम्न फ़ंक्शन जोड़ें:
Function ShowNotification ($MsgTitle, $MsgText) {
Add-Type -AssemblyName System.Windows.Forms
$global:balmsg = New-Object System.Windows.Forms.NotifyIcon
$path = (Get-Process -id $pid).Path
$balmsg.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$balmsg.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Warning
$balmsg.BalloonTipText = $MsgText
$balmsg.BalloonTipTitle = $MsgTitle
$balmsg.Visible = $true
$balmsg.ShowBalloonTip(10000)
}
आप Send-MailMessage का उपयोग करके ईमेल सूचना भी भेज सकते हैं।
फिर यदि कोई समाप्त या समाप्त होने वाला सर्टिफिकेट मिलता है, तो आपको ईमेल और पॉपअप संदेश द्वारा सूचित किया जाएगा।

फिर Task Scheduler के लिए एक स्वचालित टास्क बनाएं जिसे सप्ताह में एक या दो बार चलाया जाए और HTTPS वेबसाइट सर्टिफिकेट की समाप्ति तिथियों की जांच के लिए PowerShell स्क्रिप्ट चलाएं। (आप Register-ScheduledTask cmdlet का उपयोग करके PS1 स्क्रिप्ट फ़ाइल चलाने के लिए Task Scheduler में एक टास्क बना सकते हैं।)
Windows सर्टिफिकेट स्टोर में समाप्त सर्टिफिकेट की रिमोट जांच कैसे करें?
आपको अपने डोमेन सर्वरों (जैसे, RDP/RDS, Exchange, SharePoint, LDAPS सर्टिफिकेट, आदि) या उपयोगकर्ताओं के कंप्यूटर्स पर क्रिप्टोग्राफिक सेवाओं द्वारा उपयोग किए जाने वाले सर्टिफिकेट की समाप्ति तिथियों की जांच के लिए PowerShell स्क्रिप्ट की भी आवश्यकता हो सकती है।
लोकल कंप्यूटर पर, आप कमांड का उपयोग करके सर्टिफिकेट की सूची प्राप्त कर सकते हैं:
Get-ChildItem -Path cert
Powershell 3.0 में एक विशेष -ExpiringInDays तर्क है:
Get-ChildItem -Path cert: -Recurse -ExpiringInDays 30
PowerShell 2.0 में, वही कमांड इस तरह दिखता है:
Get-ChildItem -Path cert: -Recurse | where { $_.notafter -le (get-date).AddDays(30) -AND $_.notafter -gt (get-date)} | select thumbprint, subject
केवल अपने सर्टिफिकेट की जांच करने के लिए, रूट फ़ोल्डर में Cert: के बजाय Cert:\LocalMachine\My कंटेनर का उपयोग करें। इस प्रकार, आप Windows विश्वसनीय रूट सर्टिफिकेट और कमर्शियल सर्टिफिकेट की जांच नहीं करेंगे।
अगले 30 दिनों में समाप्त होने वाले सभी डोमेन सर्वरों पर सर्टिफिकेट ढूंढने के लिए, इस PowerShell स्क्रिप्ट का उपयोग करें:
$servers= (Get-ADComputer -LDAPFilter "(&(objectCategory=computer)(operatingSystem=Windows Server*) (!serviceprincipalname=*MSClusterVirtualServer*) (!(userAccountControl:1.2.840.113556.1.4.803:=2)))").Name
$result=@()
foreach ($server in $servers)
{
$ErrorActionPreference="SilentlyContinue"
$getcert=Invoke-Command -ComputerName $server { Get-ChildItem -Path Cert:\LocalMachine\My -Recurse -ExpiringInDays 30}
foreach ($cert in $getcert) {
$result+=New-Object -TypeName PSObject -Property ([ordered]@{
'Server'=$server;
'Certificate'=$cert.Issuer;
'Expires'=$cert.NotAfter
})
}
}
Write-Output $result

आपको उन सर्वर सर्टिफिकेट की सूची मिलेगी जो समाप्त होने वाले हैं और आपके पास उन्हें नवीनीकृत करने के लिए पर्याप्त समय होगा।