PowerShell érvényesítés és az SSL tanúsítvány lejáratáról szóló értesítés

A szerver tanúsítvány váratlan lejártával számos kellemetlen következményt válthat ki az ügyfelek számára: a biztonságos kapcsolat felállításának hiánya, hitelesítési hibák, idegesítő figyelmeztetések a böngészőben stb. Ebben a cikkben bemutatjuk, hogyan lehet a PowerShell használatával ellenőrizni az SSL / TLS tanúsítványok érvényességi idejét a távoli webhelyeken, valamint a kiszolgálók és a tartományi számítógépek tanúsítványtárolóinak érvényességi idejét..

Tartalom:

  • Érvényesítse az SSL-tanúsítvány értékeit a webhelyeken a PowerShell használatával
  • Keressen lejáró tanúsítványokat a Windows tanúsítványtárban

Érvényesítse az SSL-tanúsítvány értékeit a webhelyeken a PowerShell használatával

A közelmúltban a https://winitpro.ru/ webhelyet átvitték a HTTPS protokollra egy ingyenes SSL tanúsítvánnyal a Titkosítsuk. Ezeknek a bizonyítványoknak a sajátossága az, hogy azokat időtartamra adják ki 90 nap, amely után frissíteni kell őket (megújítani). Általában a Let's Encrypt tanúsítványok megújítását speciális szkriptek vagy botok hajtják végre a tárhely vagy a kiszolgáló oldalán (Windows esetén ez lehet WACS, Linux Certbot). De néha az automatizálás kudarcot vallhat. Szeretném, ha saját ellenőrző és értesítő rendszerem lenne az SSL tanúsítványok lejártáról a webhelyeken. Bevezettem a PowerShellbe. mert ellenőrizzük a webhely tanúsítványát egy HttpWeb kéréssel, a távoli webhelyen / kiszolgálón nincs szüksége rendszergazdai jogokra.

A következő PowerShell parancsfájlban meg kell adnia azon webhelyek listáját, amelyeken ellenőrizni kell a tanúsítvány érvényességi idejét, valamint azt is, hogy hány nappal a tanúsítvány lejárta előtt megjelenjen az értesítések ($ minCertAge). Példaként 80 napot jeleztem.

$ minCertAge = 80
$ timeoutMs = 10000
$ site = @ (
"Https://winitpro.ru",
"Https://site1.com/",
"Https://site2.ru/"
)
# A tanúsítvány érvényesítésének letiltása
[Net.ServicePointManager] :: ServerCertificateValidationCallback = $ true
foreach ($ site $ oldalakban)

Write-Host Check $ site -f Zöld
$ req = [Net.HttpWebRequest] :: Létrehozás ($ site)
$ req.Timeout = $ timeoutMs
próbáld ki a $ req.GetResponse () | Out-Null parancsot. Write-Host URL érvényesítési hiba $ site ': $ _ -f Red
[datetime] $ certExpDate = $ req.ServicePoint.Certificate.GetExpirationDateString ()
[int] $ certExpiresIn = (($ certExpDate - $ (get-date)).) Napok
$ certName = $ req.ServicePoint.Certificate.GetName ()
$ certThumbprint = $ req.ServicePoint.Certificate.GetCertHashString ()
$ certEffectiveDate = $ req.ServicePoint.Certificate.GetEffectiveDateString ()
$ certIssuer = $ req.ServicePoint.Certificate.GetIssuerName ()
if ($ certExpiresIn -gt $ minCertAge)
A $ webhely írási-gazda tanúsítványa $ certExpires napokban jár le [$ certExpDate] -f zöld
más

$ message = "A webhely tanúsítványa $ certExpiresN nap alatt jár le."
$ messagetitle = "Tanúsítvány megújítása"
Írja-fogadó $ üzenet [$ certExpDate]. Részletek: 'n'nCert név: $ certName'Cert ujjlenyomat: $ certThumbprint'nCert hatálybalépés dátuma: $ certEffectiveDate'nCert kibocsátó: $ certIssuer -f Red
# megjelenít egy felugró értesítést, és levelet küld az adminisztrátornak
#ShowNotification $ messagetitle $ üzenet
# Küldés-MailMessage [email protected] -An [email protected] -A $ messagegetitle -test $ üzenet -SmtpServer smtp.winitpro.ru

író-fogadó "________________" 'n

Ez a PowerShell szkript ellenőrzi az SSL tanúsítványokat a listában szereplő összes webhely számára. Ha olyan tanúsítványt talál, amely hamarosan lejár, azt egy figyelmeztetés jelöli.

Hogy értesítse a rendszergazdát az SSL-tanúsítvány közelgő lejártáról, felpattanó értesítést adhat hozzá. Ehhez szüntesse meg a ShowNotification $ messagetitle $ üzenet sort, és adjon hozzá egy függvényt:

Funkció 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 ($ elérési út)
$ balmsg.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon] :: Figyelem
$ balmsg.BalloonTipText = $ MsgText
$ balmsg.BalloonTipTitle = $ MsgTitle
$ balmsg.Visible = $ igaz
$ balmsg.ShowBalloonTip (10000)

E-mail értesítéseket is hozzáadhat a Send-MailMessage segítségével..

Ennek eredményeként, ha lejárnak vagy lejárnak az igazolások, levélben és felugró üzenettel értesítik Önt.

Létre kell hoznia egy automatikus ütemező feladatot, amelyet hetente 1-2 alkalommal kell végrehajtani, és futtatni a PowerShell parancsfájlt a HTTPS webhely-tanúsítványok érvényességi idejének ellenőrzéséhez (létrehozhat egy ütemező feladatot egy PS1 fájl futtatásához a Register-ScheduledTask használatával)..

Keressen lejáró tanúsítványokat a Windows tanúsítványtárban

Szüksége lehet egy szkriptre is, amely figyelemmel kíséri a kiszolgálók (például RDS, Exchange, SharePoint, LDAPS stb.) Vagy felhasználói számítógépek kriptográfiai szolgáltatásaihoz használt tanúsítványok érvényességi idejét..

A helyi számítógépen kaphat egy listát a tanúsítványokról, amelyek hamarosan lejárnak a parancs használatával Get-ChildItem -Path tanúsítvány. A Powershell 3.0 speciális érveléssel rendelkezik -ExpiringInDays:

Get-ChildItem -Path cert: -Fizetés -ExpiringInDays 30

A PowerShell 2.0-ban egy hasonló parancs így néz ki:

Get-ChildItem -Path cert: -Fizetés | ahol $ _. notafter -le (get-date) .AddDays (30) -AND $ _. notafter -gt (get-date) | válasszon ujjlenyomatot, tárgyat

Csak a saját tanúsítványainak ellenőrzéséhez használjon tárolót Tanúsítvány: \ LocalMachine \ Saját gyökér helyett cert:. Ilyen módon nem ellenőrzi a Windows gyökér tanúsítványait és a kereskedelmi tanúsítványait.

A következő PowerShell-parancsfájl használatával a következő 30 napban lejáró tanúsítványokat találhat egy domain összes kiszolgálóján:

$ szerverek = (get-adcomputer -LDAPFilter "(& (objectCategory = számítógép) (operációs rendszer = Windows Server *) (! serviceprincipalname = * MSClusterVirtualServer *) (! (userAccountControl: 1.2.840.113556.1.4.803: = 2)))) ") .Name
$ eredmény = @ ()
foreach ($ szerver $ szerveren)

$ ErrorActionPreference = "SilentlyContinue"
$ getcert = Invoke-Command -ComputerName $ server Get-ChildItem -Path tanúsító: \ LocalMachine \ My -Recurse -ExpiringInDays 30
foreach ($ cert in $ getcert)
$ eredmény + = New-Object -TypeName PSObject -Property ([megrendelt] @
'Szerver' = $ szerver;
'Tanúsítvány' = $ cert.Issuer;
'Lejár' = $ cert.NotAfter
)


Írás-output eredmény $

Tehát kap egy listát a kiszolgálón lejáró tanúsítványokról, és elég ideje lesz arra, hogy megújítsák őket.