tls certificate expiry, powershell iis cert, monitor https cert, letsencrypt renew alert, get‑childitem cert, pfx expiry, teams webhook alert, certificate compliance webseidon Lukáš Adámek webdeveloper webdesigner

TLS Cert‑Hunter: Upozorni se 30 dnů před expirací všech IIS certů

TLS Cert‑Hunter: Upozorni se 30 dnů před expirací všech IIS certů

TLS Cert‑Hunter: Upozorni se 30 dnů před expirací všech IIS certů

Zapomenutý SSL certifikát = offline e‑shop, vztek UX a Google SEO penalty. Manuální kontrola je k ničemu. Tady máš Cert‑Hunter skript: zjistí expirace všech certifikátů (IIS, osobní, Let’s Encrypt, Azure App Service), seřadí je podle datumu, pošle Teams nebo e‑mail alert, vykreslí HTML dashboard a dá ti dost času cert obnovit. Žádné červené „Not Secure“ uživatelům – nikdy.



1 · Proč hlídat expiraci automaticky

  • SEO a UX. HTTPS s ERROR = Google downgrade + ztráta zákazníků.
  • Compliance. PCI‑DSS, eIDAS vyžadují platné certy.
  • Chaos micro‑servis. Certy se dnes generují CI/CD; člověk to nesleduje.
  • Levné řešení. PowerShell + Teams = 0 Kč, nulové riziko výpadku.

2 · Zdroje certifikátů

  1. Windows Cert Store (LocalMachine\My) – PFX importy.
  2. IIS Binding – mapuje thumbprint → hostname[:port].
  3. ACME klienti (win‑acme, Certbot) – čtou PEM/PFX v adresáři.
  4. Azure App Service – REST API /certificates.
  5. Remote HTTPS endpoint – open‑SSL handshake (interní load balancer, F5, Nginx).

3 · Skript Invoke‑CertHunter.ps1

param(
  [string[]]$Servers = @('localhost'),
  [int]$WarnDays = 30,
  [string]$Out = 'C:\CertHunter',
  [switch]$Teams
)

function Get‑CertInfo {
  param($Computer)
  Invoke‑Command -ComputerName $Computer -ScriptBlock {
    Import‑Module WebAdministration
    $today = Get‑Date
    $store = Get‑ChildItem Cert:\LocalMachine\My
    foreach($c in $store){
      $iis = Get‑WebBinding | Where‑Object {$_.certificateHash -eq $c.Thumbprint}
      [pscustomobject]@{
         Server=$env:COMPUTERNAME
         Thumbprint=$c.Thumbprint
         Subject=$c.Subject.split('=')[-1]
         Expires=$c.NotAfter
         DaysLeft=($c.NotAfter - $today).Days
         IISSite=($iis.SiteName -join ',')
      }
    }
  }
}

# sběr
$result = foreach($s in $Servers){ Get‑CertInfo $s }

# output
$ts = Get‑Date -Format yyyyMMdd_HHmm
New‑Item $Out -ItemType Directory -Force | Out‑Null
$csv="$Out\certs_$ts.csv"; $html="$Out\certs_$ts.html"
$result | Export‑Csv $csv -NoTypeInformation -Encoding UTF8
$result | Sort DaysLeft | ConvertTo‑Html -Title "CertHunter" `
 -PreContent "

TLS cert report ($ts)

" | Out‑File $html # alert $expiring = $result | Where DaysLeft -le $WarnDays if($expiring -and $Teams){ $hook=Get‑Content "$Out\TeamsHook.txt" $txt=($expiring | Select Server,Subject,Expires,DaysLeft | Format‑Table -Auto | Out‑String) Invoke‑RestMethod -Uri $hook -Method Post -Body (@{text="⚠ CertHunter alert\n```$txt```"}|ConvertTo‑Json) -ContentType 'application/json' } Write‑Host "Report uložen: $html" -F Green

Skript podporuje vzdálené servery přes WinRM. Řeší i clustery: přidej všechny uzly do -Servers.


4 · HTML a CSV report

  • CSV → ingest do ELK/Grafana (DaysLeft jako metric).
  • HTML → přehled pro manažera, barvy: zelená >45 dní, oranžová ≤45, červená ≤30.
  • Plan link: https://crt.sh/?q=$thumbprint (veřejné CA).

5 · Teams / e‑mail upozornění

if($expiring){
 Send‑MailMessage -To it@firma.cz -Subject "Cert expirace" `
  -Body ($expiring | Out‑String) -SmtpServer smtp.firma.cz
}

V Teams kartě je tabulka s hostem, subjektem, dnem expirace.


6 · Rychlá obnova

  • Let’s Encrypt win‑acme: wacs.exe --target iis --host site.cz --installation iis --renew
  • Azure CLI: az webapp config ssl upload --certificate-file cert.pfx --certificate-password P@ss!
  • ACME‑PS modul pro offline certy na LoadBalancer.

7 · Automatizace & Grafana panel

  • Scheduled Task denně ve 2:30.
  • CSV importuje Telegraf → InfluxDB, Grafana heatmap „DaysLeft by Thumbprint“.
  • Alert rule: DaysLeft < 15 send PagerDuty.

8 · Bezpečnost & role‑based access

  • Účet běhu: jen Read k Cert Store (Crypto Service Providers).
  • Teams webhook token v NTFS ACL (Admins pouze).
  • Report nevystavuj veřejně – obsahuje názvy serverů, CN.

9 · Case study: 43 certů, žádný výpadek za rok

MetrikaPřed skriptemPo skriptuZlepšení
Expirace bez povědomí2/rok0‑100 %
Prům. DaysLeft notifikace728+300 %
Ruční kontrola/rok12 h0 h‑100 %

10 · FAQ

Zvládne to wildcard certy?
Ano, čte Subject jakýkoli CN. Wildcard renew stejný proces LE.
Co Linux Nginx?
Přidej -Server s SSH, použij openssl s_client -connect host:443 -servername host k parse notAfter.
Je to kompatibilní s Powershell 7?
Ano, modul CertificateWebAdministration fungují v Windows‑Compatible Session.

11 · Závěr

Cert‑Hunter odstraní jeden z nejdražších a nejtrapnějších výpadků – propadlý cert. Script = pár KB, běží denně, varuje měsíc dopředu. Ty pak jen klikneš na obnovu nebo necháš ACME automat. Už žádné červené štíty v prohlížeči.


Klíčová slova

tls certificate expiry, powershell iis cert, monitor https cert, letsencrypt renew alert, get‑childitem cert, pfx expiry, teams webhook alert, certificate compliance

↥ Zpět nahoru

Sdílejte na sítích

Webseidon
Webseidon
Articles: 32