Şirket Web Siteleri ve İç Servislerin SSL Sertifika Sürelerini 30 Gün Önceden Tarayıp Uyaran PowerShell Denetçisi
Bir şirketin karşılaşabileceği en utanç verici anlardan biri, ana e-ticaret sitesinin, kurumsal web sayfasının veya müşteri portalının bir sabah aniden kırmızı ekranla "Bu siteye bağlantınız güvenli değil - Sertifikanın süresi doldu" uyarısı vermesidir. Müşteriler panikler, satışlar durur ve yöneticiler sertifikanın ne zaman bittiğini kimsenin takip etmediğini fark eder. Şirket bünyesindeki onlarca SSL/TLS sertifikasını takvimde elle takip etmek yerine, süresi 30 günün altına düşenleri her pazartesi raporlayan PowerShell SSL Denetim Aracı.
1. TCP Handshake Üzerinden Uzaktan Sertifika Okuma
Bu aracın güzelliği, hedef sunucunun içine girmeye gerek duymamasıdır; dışarıdan bir tarayıcı gibi HTTPS (Port 443) bağlantısı kurarak sunucunun sunduğu sertifikanın bitiş tarihini milisaniyeler içinde okur.
2. Üretim Seviyesinde PowerShell SSL Tarayıcısı
$TargetDomains = @(
"holding.com.tr",
"b2b.holding.com.tr",
"vpn.holding.com.tr:8443",
"mail.holding.com.tr",
"odeme.holding.com.tr"
)
$WarningThresholdDays = 30
$Report = @()
foreach ($Target in $TargetDomains) {
$parts = $Target.Split(":")
$HostName = $parts[0]
$Port = if ($parts.Length -gt 1) { [int]$parts[1] } else { 443 }
try {
$tcpClient = New-Object System.Net.Sockets.TcpClient
$tcpClient.Connect($HostName, $Port)
$sslStream = New-Object System.Net.Security.SslStream($tcpClient.GetStream(), $false, { $true })
$sslStream.AuthenticateAsClient($HostName)
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($sslStream.RemoteCertificate)
$DaysRemaining = ($cert.NotAfter - (Get-Date)).Days
$Status = if ($DaysRemaining -lt 0) { "SÜRESİ DOLMUŞ!" } elseif ($DaysRemaining -le $WarningThresholdDays) { "KRİTİK UYARI" } else { "GÜVENLİ" }
$Report += [PSCustomObject]@{
Hedef = $Target
Yayınlayan = $cert.Issuer
BitişTarihi = $cert.NotAfter.ToString("yyyy-MM-dd")
KalanGün = $DaysRemaining
Durum = $Status
}
$sslStream.Close()
$tcpClient.Close()
}
catch {
$Report += [PSCustomObject]@{
Hedef = $Target
Yayınlayan = "HATA"
BitişTarihi = "HATA"
KalanGün = -999
Durum = "ERİŞİLEMEDİ: $($_.Exception.Message)"
}
}
}
# Sonuçları Konsola Renkli Basma
$Report | Format-Table -AutoSize
3. Microsoft Teams ve E-Posta Bildirimi
Eğer KalanGün 30 günden küçükse, script Microsoft Teams webhook'una kırmızı bir alarm kartı atar:
"DİKKAT: odeme.holding.com.tr sertifikasının süresi 14 gün sonra doluyor! Lütfen Sectigo/DigiCert panelinden yenileme yapınız."
Karşılaşılan Kritik Hatalar ve Çözüm İpuçları
- SNI (Server Name Indication) Eksikliği: Birden fazla sitenin aynı IP'yi paylaştığı sunucularda
AuthenticateAsClient($HostName)fonksiyonu doğru FQDN ile çağrılmazsa varsayılan yanlış sertifika dönebilir. Scriptimiz SNI başlığını doğru gönderecek şekilde tasarlanmıştır.
Mühendis Notu
Bu scripti her pazartesi sabahı çalışacak şekilde zamanlayın. Şirketinizdeki hiçbir SSL sertifikası bir daha asla sürpriz bir şekilde dolmaz ve hiçbir müşteriniz o kırmızı güvenlik uyarısını görmez.
