Sunucu Güvenliği
cPanel'de Süresi Dolmuş SSL Sertifikaları: AutoSSL Neden Yenilemez, Nasıl Kontrol Edilir?
AutoSSL açık olsa bile sertifikalar neden süresini doldurur? DNS, CAA, Cloudflare ve sağlayıcı limitleri; tüm site ve servis sertifikalarını openssl ile bitiş tarihine göre listelemenin yolları.
Güncellendi:
AutoSSL açık olan bir cPanel sunucusunda süresi dolmuş sertifika olmayacağını düşünmek doğaldır. Pratikte durum farklı. Geliştirme sırasında ilk denediğimiz, 295 sitenin barındırıldığı gerçek bir cPanel sunucusunda tek denetimde 44 süresi dolmuş SSL sertifikası çıktı. Sunucuda AutoSSL vardı; sertifikalar yine de yenilenmemişti ve kimse bunu fark etmemişti.
Bu yazıda AutoSSL'in neden yenileyemediğini, sunucudaki tüm sertifikaları bitiş tarihleriyle nasıl listeleyeceğinizi, gözden kaçan servis sertifikalarını (cPanel, WHM, Exim, Dovecot) nasıl kontrol edeceğinizi ve hangi bulguya ne kadar acil bakmanız gerektiğini anlatıyoruz. Komutlar AlmaLinux, Rocky Linux ve CloudLinux üzerindeki cPanel/WHM için yazıldı, root yetkisi gerektirir ve sunucuda değişiklik yapmaz.
AutoSSL nasıl çalışır, nerede takılır
AutoSSL, sunucudaki alan adları için belirli aralıklarla sertifika talep eder ve süresi yaklaşanları yeniler. Sertifika verilmeden önce alan adının bu sunucuya ait olduğu doğrulanır (domain control validation). Doğrulama genellikle HTTP üzerinden, sitenin kök dizinine konan geçici bir dosyanın dışarıdan okunmasıyla yapılır. Bu adım başarısız olursa o alan adı için sertifika verilmez ve mevcut sertifika süresi dolana kadar kullanılmaya devam eder. AutoSSL bir sonraki çalışmada yeniden dener, ancak nedeni ortadan kalkmadıkça sonuç değişmez.
Yenilemenin başarısız olmasının yaygın nedenleri
- Alan adı artık bu sunucuya işaret etmiyor. Müşteri sitesini başka bir yere taşımış, ama hesap ya da eklenti alan adı sunucuda kalmış. Doğrulama dosyası başka sunucuda arandığı için yenileme her seferinde başarısız olur.
- Alan adının kaydı sona ermiş ya da alan adı silinmiş. DNS yanıtı yoksa doğrulama yapılamaz.
- CAA kaydı engelliyor. Alan adında CAA kaydı varsa, yalnızca orada adı geçen sertifika otoriteleri sertifika verebilir. Kayıtta kullandığınız AutoSSL sağlayıcısı yoksa talep reddedilir.
- Cloudflare proxy açık. Alan adı sunucu IP'sine değil Cloudflare IP'lerine çözülür. AutoSSL bazı alan adlarını bu yüzden atlayabilir; HTTP doğrulaması ise Cloudflare tarafındaki yönlendirme ya da güvenlik kuralları yüzünden başarısız olabilir. Ziyaretçi Cloudflare'in sertifikasını gördüğü için sorun, SSL modu Full (strict) yapılana kadar fark edilmez.
- Doğrulama yolu engelleniyor. .htaccess içindeki zorunlu yönlendirmeler, güvenlik eklentileri ya da ModSecurity kuralları /.well-known altındaki doğrulama isteğini engelleyebilir.
- Sağlayıcı limitleri. Let's Encrypt, aynı alan adı için haftalık sertifika sayısını ve başarısız doğrulama denemelerini sınırlar. Çok sayıda alt alan adı olan hesaplarda bu limitlere takılmak mümkündür.
- AutoSSL sağlayıcısı etkin değil ya da hesabın AutoSSL özelliği kapatılmış. Let's Encrypt seçiliyse kullanım koşullarının kabul edilmiş olması da gerekir.
Tüm sertifikaları bitiş tarihleriyle listeleyin
cPanel, Apache'nin kullandığı site sertifikalarını /var/cpanel/ssl/apache_tls altında, her alan adı için ayrı bir dizinde saklar. Dizindeki combined dosyası sertifikayı da içerir. Aşağıdaki döngü her sertifikanın kalan gün sayısını hesaplar ve en acilden başlayarak sıralar:
bash
for c in /var/cpanel/ssl/apache_tls/*/combined; do
d=$(basename "$(dirname "$c")")
e=$(openssl x509 -enddate -noout -in "$c" 2>/dev/null | cut -d= -f2)
[ -n "$e" ] || continue
echo "$(( ($(date -d "$e" +%s) - $(date +%s)) / 86400 ))|$d|$e"
done | sort -t'|' -k1 -n | column -t -s'|' | head -50Negatif değerler süresi dolmuş sertifikalardır. Belirli bir eşiğin altındakileri hızlıca saymak için openssl'in -checkend seçeneği işe yarar; değer saniye cinsindendir, 2592000 saniye 30 güne karşılık gelir:
bash
n=0
for c in /var/cpanel/ssl/apache_tls/*/combined; do
openssl x509 -checkend 2592000 -noout -in "$c" >/dev/null 2>&1 || n=$((n+1))
done
echo "30 gün içinde bitecek ya da bitmiş: $n"Ziyaretçinin gördüğü sertifikayı canlı kontrol edin
Dosyadaki sertifika ile web sunucusunun gerçekte sunduğu sertifika her zaman aynı değildir; örneğin LiteSpeed ya da bir ön proxy farklı bir sertifika sunuyor olabilir. Canlı kontrol için her alan adına SNI ile bağlanıp sunulan sertifikanın bitiş tarihini okuyun. Alan adı listesi /etc/userdomains dosyasından gelir:
bash
awk -F': ' '$1 !~ /^\*/ {print $1}' /etc/userdomains | head -50 | while read -r d; do
e=$(echo | timeout 8 openssl s_client -connect 127.0.0.1:443 -servername "$d" 2>/dev/null \
| openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
echo "$d -> ${e:-sertifika okunamadı}"
doneBağlantıyı 127.0.0.1 üzerinden kurduğumuz için sonuç DNS'ten bağımsızdır: alan adı başka bir sunucuya işaret etse bile bu sunucunun o alan adı için sunduğu sertifikayı görürsünüz. Ziyaretçinin gördüğü sertifikayı kontrol etmek isterseniz 127.0.0.1 yerine alan adının kendisine bağlanın.
Süresi dolmuş bir sertifikanın nedenini bulun
Listede süresi dolmuş bir alan adı gördüğünüzde ilk soru, alan adının hâlâ bu sunucuya işaret edip etmediğidir. Alan adının hangi hesaba ait olduğunu, DNS'in nereyi gösterdiğini ve CAA kaydını şu komutlarla kontrol edebilirsiniz:
bash
/scripts/whoowns ornek.com.tr
dig +short A ornek.com.tr
hostname -I
dig +short CAA ornek.com.trA kaydı sunucunun IP adreslerinden biri değilse, sertifikanın yenilenmemesi beklenen bir sonuçtur. Bu durumda yapılacak iş sertifikayı zorlamak değil, alan adının bu sunucuda ne işi olduğunu netleştirmektir. Site taşınmışsa alan adını hesaptan kaldırmak hem karmaşayı azaltır hem de AutoSSL'in her çalışmada başarısız deneme yapmasını önler. CAA çıktısında yalnızca başka bir otorite görünüyorsa, kullandığınız AutoSSL sağlayıcısını CAA kaydına eklemeniz gerekir.
AutoSSL'in o alan adı için neden başarısız olduğunu görmek için WHM içinde SSL/TLS altındaki Manage AutoSSL ekranının Logs sekmesine bakın. Kayıtlarda alan adı başına doğrulama sonucu ve hata mesajı yer alır.
AutoSSL durumunu kontrol etmek ve elle çalıştırmak
Önce sunucuda hangi sağlayıcının etkin olduğuna bakın. Hiçbir sağlayıcı etkin değilse AutoSSL hiçbir sertifikayı yenilemez:
bash
whmapi1 get_autossl_providers | grep -E 'module_name|enabled'Nedeni giderdikten sonra bir sonraki zamanlanmış çalışmayı beklemek yerine AutoSSL'i tek bir kullanıcı için elle çalıştırabilirsiniz. Bu komutlar yeni sertifika talep edip kurabilir; yani sunucuda değişiklik yapar. Tüm kullanıcılar için çalıştırmadan önce tek bir hesapta deneyin ve sonucu kayıtlardan kontrol edin.
bash
/usr/local/cpanel/bin/autossl_check --user=KULLANICI_ADI
whmapi1 start_autossl_check_for_one_user username=KULLANICI_ADIKısmi kapsama: www, mail ve diğer alt alan adları
AutoSSL bir alan adı için sertifika isterken www gibi alt alan adlarını ve cPanel'in otomatik oluşturduğu mail, webmail ve cpanel gibi servis alt alan adlarını da kapsamaya çalışır. Bu alt alan adlarından biri doğrulanamazsa AutoSSL genellikle doğrulanabilenler için sertifika verir ve diğerlerini dışarıda bırakır. Sonuçta site ana adresiyle sorunsuz açılırken www ile girildiğinde sertifika hatası verebilir. Sertifikanın hangi adları kapsadığını şu komutla görebilirsiniz:
bash
openssl x509 -noout -ext subjectAltName -in /var/cpanel/ssl/apache_tls/ornek.com.tr/combinedEski openssl sürümlerinde -ext seçeneği yoksa openssl x509 -noout -text çıktısında Subject Alternative Name satırına bakın. Eksik bir ad varsa, o adın DNS kaydını kontrol edin; çoğu durumda www kaydı silinmiş ya da başka bir yere yönlendirilmiştir.
Elle kurulmuş sertifikalar
Bir müşteri ücretli bir sertifikayı elle kurmuşsa, o sertifikanın yenilenmesi AutoSSL'in değil, müşterinin ya da sizin sorumluluğunuzdadır. WHM'deki Manage AutoSSL ekranının Options sekmesinde, süresi dolan ya da geçersiz hale gelen AutoSSL dışı sertifikaların AutoSSL tarafından değiştirilip değiştirilemeyeceğini belirleyen bir seçenek bulunur. Bu seçenek kapalıysa elle kurulmuş bir sertifika, süresi dolduktan sonra da yerinde kalır. Bitiş listesinde sertifikayı veren otoriteyi de görmek isterseniz döngüye openssl x509 -noout -issuer çıktısını ekleyin.
Düzenli kontrol için basit bir betik
Yukarıdaki kontrolü ayda bir hatırlamak yerine zamanlanmış bir göreve bağlayabilirsiniz. Aşağıdaki betik yalnızca okur ve 30 gün içinde bitecek ya da bitmiş sertifikaları listeler. Çıktı boş değilse cron bunu MAILTO ile tanımladığınız adrese e-posta olarak gönderir. Betiği /root/bin/ssl-expiry-check.sh olarak kaydedip çalıştırılabilir yapın.
bash
#!/bin/bash
for c in /var/cpanel/ssl/apache_tls/*/combined /var/cpanel/ssl/system/certs/*.crt; do
[ -f "$c" ] || continue
if ! openssl x509 -checkend 2592000 -noout -in "$c" >/dev/null 2>&1; then
echo "$(openssl x509 -enddate -noout -in "$c" | cut -d= -f2) $c"
fi
donebash
# /etc/cron.d/ssl-expiry-check
MAILTO=yonetici@ornek.com.tr
0 6 * * 1 root /root/bin/ssl-expiry-check.shServis sertifikalarını unutmayın
Site sertifikalarının yanında cPanel'in kendi servislerinin de sertifikaları vardır: cPanel, WHM ve webmail arayüzlerini sunan cpsrvd, e-posta gönderimi için Exim, IMAP ve POP3 için Dovecot ve FTP. Bu sertifikalar genellikle sunucunun ana makine adı (hostname) için verilir. Ana makine adı sunucuya çözülmüyorsa AutoSSL bu sertifikayı da yenileyemez. Süresi dolduğunda müşterileriniz WHM'e girişte ya da e-posta istemcisinde sertifika uyarısı görür.
Servis sertifikalarını hem dosyadan hem de ilgili porttan canlı olarak kontrol edebilirsiniz:
bash
for c in /var/cpanel/ssl/system/certs/*.crt; do
echo "$(openssl x509 -noout -enddate -in "$c" | cut -d= -f2) $(basename "$c")"
done
H=$(hostname)
for p in 2083 2087 2096 465 993 995; do
echo -n "$p: "
echo | timeout 8 openssl s_client -connect 127.0.0.1:$p -servername "$H" 2>/dev/null \
| openssl x509 -noout -enddate 2>/dev/null || echo "okunamadı"
done
echo -n "587: "
echo | timeout 8 openssl s_client -connect 127.0.0.1:587 -starttls smtp 2>/dev/null \
| openssl x509 -noout -enddate 2>/dev/nullHangi servisin hangi sertifikayı kullandığını WHM içinde Service Configuration altındaki Manage Service SSL Certificates ekranında da görebilirsiniz. Ana makine adının DNS'te sunucuya çözüldüğünü dig +short A $(hostname) ile doğrulayın.
Hangi bulguya ne kadar acil bakılmalı
Her yaklaşan bitiş tarihi aynı aciliyette değildir. AutoSSL normalde sertifikaları bitişten epey önce yeniler; bu yüzden 30 günün altına düşmüş bir sertifika, otomatik yenilemenin bir süredir başarısız olduğuna işaret eder. Sentinel'in ssl-expiry modülünde kullandığımız eşikler şunlardır:
| Kalan süre | Önem | Anlamı |
|---|---|---|
| Süresi dolmuş | Kritik | Ziyaretçi ya da e-posta istemcisi uyarı görüyor; site HTTPS üzerinden güvenli açılmıyor. |
| 0 ile 7 gün arası | Yüksek | Otomatik yenileme başarısız; birkaç gün içinde müdahale edilmezse sertifika bitecek. |
| 8 ile 30 gün arası | Orta (uyarı) | Yenileme zamanı geldi ama gerçekleşmedi; nedenini araştırmaya başlayın. |
| 31 ile 60 gün arası | Düşük (bilgi) | Normal yenileme penceresi; daha acil bir bulgu yoksa bilgi olarak gösterilir. |
Süresi dolmuş her sertifika aynı etkiyi yaratmaz. Hâlâ bu sunucuda yayında olan bir sitenin sertifikası ziyaretçiyi doğrudan etkiler ve hemen ele alınmalıdır. Başka bir sunucuya taşınmış bir alan adının bu sunucudaki eski sertifikası ise ziyaretçiye görünmez; ancak listeyi kalabalıklaştırır ve gerçek sorunları gözden kaçırmanıza neden olur. Önce yayındaki siteleri ve servis sertifikalarını düzeltin, ardından taşınmış alan adlarını hesaplardan temizleyin.
Sentinel bunu nasıl yapar
Sentinel'in ssl-expiry modülü, yukarıdaki iki kaynağı her denetimde tarar: /var/cpanel/ssl/apache_tls altındaki site sertifikaları ve /var/cpanel/ssl/system/certs altındaki servis sertifikaları. Her sertifikanın kalan gün sayısı openssl ile hesaplanır ve tablodaki eşiklere göre sınıflandırılır. Süresi dolmuş sertifikalar tek bir Kritik bulguda toplanır; bulgu metni toplam sayıyı ve bunun kaçının site (Apache), kaçının servis (System) sertifikası olduğunu gösterir, ayrıntısında da ilk beş alan adı yer alır.
Düzeltme tarafında Sentinel, önce AutoSSL'de etkin bir sağlayıcı olup olmadığına bakar. Etkin bir sağlayıcı varsa panelden onayınızla AutoSSL yenilemesini tetikler; bu yalnızca site sertifikalarını kapsar, servis sertifikalarını cPanel kendisi yönetir. Etkin sağlayıcı yoksa bir şey değiştirmez ve sertifikanın elle yenilenmesi gerektiğini bildirir. ssl-tls modülü ise AutoSSL sağlayıcısının etkin olup olmadığını ve sunucunun TLS 1.0/1.1 bağlantısı kabul edip etmediğini ayrıca denetler.
Her denetim bir öncekiyle karşılaştırıldığı için, yeni süresi dolan sertifikalar ile giderilenler ayrı görünür. Tüm paketlerde her ayın 1'inde, Professional pakette ayrıca her pazartesi otomatik denetim yapılır; böylece 30 günlük uyarı eşiğine giren bir sertifika, süresi dolmadan önce raporunuza düşer.
TEKNOWEB ÇÖZÜMLERİ
Bu rehberle ilgili çözümler
Rehberdeki konuyu gerçek ürün ve hizmet seçenekleriyle birlikte değerlendirin.
Yorumlar ve sorular
Deneyimini paylaş, birlikte çözelim.
Yorumlar yükleniyor…
Okumaya devam edin
Tüm rehberlerSunucu Güvenliği
Sentinel güvenlik raporu nasıl okunur: puan, önem derecesi ve öncelik sırası
Sentinel'de ilk sunucunuzu ekledikten sonra panel ve PDF raporda gördüğünüz puanın nasıl hesaplandığı, önem ile durum farkı, bulgulara hangi sırayla bakacağınız ve onaylı düzeltmenin nasıl çalıştığı.
Sunucu Güvenliği
cPanel sunucusunda açık port denetimi: MySQL, Redis ve Docker dışarıya açık mı?
ss ile dinleyen servisleri çıkarın, MySQL, Redis, MongoDB ve Docker'ı yerel arayüze bağlayın, CSF kurallarını gözden geçirin ve güvenlik duvarı değişikliğini geri alma zamanlayıcısıyla güvenle yapın.
Sunucu Güvenliği
cPanel'de PHP güvenlik ayarları: her sürümde expose_php, display_errors ve fazlası
Çoklu ea-php ve alt-php sürümü olan cPanel sunucusunda expose_php, display_errors, allow_url_include ve disable_functions ayarlarının etkin değerini nasıl doğrularsınız, hangilerini güvenle kapatırsınız?