सर्वर प्रमाणपत्र की अप्रत्याशित समाप्ति आपके उपयोगकर्ताओं और ग्राहकों के लिए कई समस्याएं पैदा कर सकती है:वे आपकी साइट के साथ एक सुरक्षित कनेक्शन स्थापित करने में सक्षम नहीं हो सकते हैं, प्रमाणीकरण त्रुटियां हो सकती हैं, ब्राउज़र में कष्टप्रद सूचनाएं दिखाई दे सकती हैं, आदि। इसमें लेख हम दिखाएंगे कि दूरस्थ साइटों पर SSL/TLS प्रमाणपत्र की समाप्ति तिथि की जांच कैसे करें, या अपने डोमेन में सर्वर या कंप्यूटर पर स्थानीय प्रमाणपत्र स्टोर में समाप्त होने वाले प्रमाणपत्रों की सूची प्राप्त करें।
PowerShell के साथ वेबसाइट SSL प्रमाणपत्र की समाप्ति तिथि प्राप्त करें
कई वेब प्रोजेक्ट HTTPS को लागू करने के लिए लेट्स एनक्रिप्टेड एसएसएल प्रमाणपत्रों का उपयोग करते हैं। ये प्रमाणपत्र 90 . के लिए समस्याएं हैं दिन और नियमित रूप से नवीनीकृत किया जाना चाहिए। आमतौर पर, विशेष स्क्रिप्ट या बॉट लेट्स एनक्रिप्ट सर्टिफिकेट को होस्टिंग या सर्वर साइड पर अपडेट करते हैं (यह विंडोज़ में डब्ल्यूएसीएस या लिनक्स में सर्टबॉट हो सकता है)। हालाँकि, कभी-कभी स्वचालित प्रमाणपत्र नवीनीकरण विफल हो जाता है। मैं अपनी खुद की स्क्रिप्ट चाहता हूं जो वेबसाइटों पर एसएसएल प्रमाणपत्र समाप्ति तिथियों की जांच करे और जब वे समाप्त होने वाले हों तो मुझे सूचित करें। मैंने इसे बनाने के लिए पावरशेल का इस्तेमाल किया। चूंकि हम HttpWeb क्वेरी के माध्यम से किसी वेबसाइट के प्रमाणपत्र की जांच कर रहे हैं, इसलिए हमें किसी दूरस्थ वेबसाइट/सर्वर पर व्यवस्थापकीय विशेषाधिकारों की आवश्यकता नहीं है।
निम्नलिखित पावरशेल स्क्रिप्ट में, आपको उस वेबसाइट की सूची निर्दिष्ट करनी होगी, जिस पर आप प्रमाणपत्र की समाप्ति तिथियों की जांच करना चाहते हैं और जब संबंधित अधिसूचना आपको प्रदर्शित होने लगे तो प्रमाणपत्र की आयु ($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 [email protected] -To [email protected] -Subject $messagetitle -body $message -SmtpServer gwsmtp.woshub.com -Encoding UTF8
}
write-host "________________" `n
}
यह पावरशेल स्क्रिप्ट सूची में सभी वेबसाइटों के एसएसएल प्रमाणपत्रों की जांच करेगी। यदि कोई प्रमाणपत्र मिलता है जो समाप्त होने वाला है, तो उसे अधिसूचना में हाइलाइट किया जाएगा।
किसी व्यवस्थापक को यह सूचित करने के लिए कि 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
. का उपयोग करके एक ईमेल सूचना भी भेज सकते हैं ।
फिर यदि कोई समय सीमा समाप्त या समाप्त होने वाले प्रमाणपत्र मिलते हैं, तो आपको एक ईमेल और एक पॉपअप संदेश द्वारा सूचित किया जाएगा।
फिर टास्क शेड्यूलर को सप्ताह में एक या दो बार चलाने के लिए एक स्वचालित कार्य बनाएं और अपने HTTPS वेबसाइट प्रमाणपत्रों की समाप्ति तिथियों की जांच करने के लिए पावरशेल स्क्रिप्ट चलाएं। (आप रजिस्टर-शेड्यूल्ड टास्क cmdlet का उपयोग करके PS1 स्क्रिप्ट फ़ाइल चलाने के लिए टास्क शेड्यूलर में एक टास्क बना सकते हैं।)
Windows प्रमाणपत्र स्टोर में समाप्त प्रमाणपत्रों की दूरस्थ रूप से जांच कैसे करें?
आपको अपने डोमेन सर्वर (उदा., RDP/RDS , Exchange, SharePoint, LDAPS प्रमाणपत्र, आदि) या उपयोगकर्ताओं के कंप्यूटरों पर क्रिप्टोग्राफ़िक सेवाओं द्वारा उपयोग किए जाने वाले प्रमाणपत्रों की समाप्ति तिथियों की जांच करने के लिए PowerShell स्क्रिप्ट की भी आवश्यकता हो सकती है।
स्थानीय कंप्यूटर पर, आप कमांड का उपयोग करके प्रमाणपत्रों की सूची प्राप्त कर सकते हैं:
Get-ChildItem -Path cert
Powershell 3.0 में एक विशेष -ExpiringInDays
. है तर्क:
Get-ChildItem -Path cert: -Recurse -ExpiringInDays 30
पावरशेल 2.0 में, वही कमांड इस तरह दिखता है:
Get-ChildItem -Path cert: -Recurse | where { $_.notafter -le (get-date).AddDays(30) -AND $_.notafter -gt (get-date)} | select thumbprint, subject
केवल अपने प्रमाणपत्रों की जांच करने के लिए, Cert:\LocalMachine\My
. का उपयोग करें Cert:
. के बजाय कंटेनर रूट फ़ोल्डर में। इस प्रकार, आपने Windows विश्वसनीय रूट प्रमाणपत्र और वाणिज्यिक प्रमाणपत्रों की जांच नहीं की।
सभी डोमेन सर्वर पर अगले 30 दिनों में समाप्त होने वाले प्रमाणपत्रों को खोजने के लिए, इस पॉवरशेल स्क्रिप्ट का उपयोग करें:
$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
आपको सर्वर प्रमाणपत्रों की सूची मिल जाएगी जो समाप्त होने वाले हैं और आपके पास उन्हें नवीनीकृत करने के लिए पर्याप्त समय होगा।