Let's Encrypt Sertifikasını Otomatik Yenilemek
İlk kez Let's Encrypt sertifikası kurduğumda her şey güzeldi; tarayıcıda yeşil kilit, HTTPS çalışıyor, gurur tavan. Sonra doksan gün geçti ve bir sabah kendi siteme girerken "Bağlantınız gizli değil" uyarısını gördüm. O gün öğrendim ki sertifika kurmak işin kolay kısmıydı, asıl mesele onu unutmamak. Neyse ki bunu hatırlamak zorunda değilsiniz: Certbot bu işi sizin yerinize yapabiliyor. Aşağıda kendi sunucularımda kullandığım SSL sertifika otomatik yenileme düzenini adım adım anlatıyorum.
Neden 90 gün ve neden otomatik olmalı
Let's Encrypt sertifikaları kısa ömürlü veriliyor. Bunun sebebi güvenlik: çalınan bir anahtarın zararı kısa sürede sınırlanıyor. Ama kısa ömür, elle yenilemeyi imkânsız hale getiriyor. Ayda bir sunucuya girip komut çalıştırmayı hatırlamak zorunda kalmak istemezsiniz. Certbot zaten bu senaryo düşünülerek yazılmış; kurulumla birlikte bir zamanlanmış görev bırakıyor ve genellikle sizin hiçbir şey yapmanıza gerek kalmıyor. "Genellikle" dediğim yerlerde ise işler karışıyor, oraya da geleceğiz.
Adım adım kurulum ve doğrulama
-
Certbot'un nasıl kurulduğunu tespit edin. Sunucuya SSH ile bağlanıp which certbot ve ardından certbot --version yazın. Eğer Certbot'u snap ile kurduysanız otomatik yenileme zamanlayıcısı hazır gelir. Dağıtımın paket yöneticisiyle (apt, dnf) kurduysanız da bir systemd timer veya cron dosyası oluşur. Hangi yöntemi kullandığınızı bilmek, sorun çıktığında nereye bakacağınızı belirler.
-
Zamanlayıcının gerçekten var olduğunu görün. systemd kullanan bir sistemdeyseniz systemctl list-timers | grep certbot komutu size bir sonraki çalışma zamanını gösterir. Çıktı boş dönüyorsa ls /etc/cron.d/ ve ls /etc/cron.daily/ altına bakın. İkisinde de bir şey yoksa yenileme hiç kurulmamış demektir; kendi görevinizi yazmanız gerekir.
-
Kuru çalıştırma (dry run) yapın. Bu adımı atlamayın:
sudo certbot renew --dry-run
Bu komut Let's Encrypt'in test sunucusuna gidip yenileme sürecinin tamamını canlandırır, ama gerçek sertifikayı değiştirmez. Sayaçları da yakmaz. "Congratulations, all simulated renewals succeeded" satırını görüyorsanız işin büyük kısmı tamam.
-
Yenileme sonrası servisin yeniden yüklendiğinden emin olun. En sık kaçırılan nokta bu. Sertifika dosyası yenilenir ama Nginx veya Apache eski sertifikayı hafızasında tutmaya devam eder. Certbot'un nginx/apache eklentisini kullanıyorsanız bunu genelde kendisi hallediyor. Standalone veya webroot yöntemiyle çalışıyorsanız kanca (hook) eklemeniz gerekir:
sudo certbot renew --deploy-hook "systemctl reload nginx"
Bu parametreyi bir kez verdiğinizde /etc/letsencrypt/renewal/alanadi.conf dosyasına yazılır ve sonraki yenilemelerde otomatik uygulanır. Alternatif olarak çalıştırılabilir bir betiği /etc/letsencrypt/renewal-hooks/deploy/ dizinine koyabilirsiniz; oradaki her betik başarılı yenilemeden sonra çalışır.
-
Kendi cron görevinizi yazacaksanız zamanı rastgele seçin. Zamanlayıcı yoksa şöyle bir satır işinizi görür:
17 3,15 * * * root certbot -q renew
Günde iki kez denemek mantıklı, çünkü tek denemede ağ sorunu olursa ikinci şans kalır. Certbot sertifikanın süresi 30 günün altına düşmedikçe zaten hiçbir şey yapmaz, yani sık denemek zararsız. Dakika değerini 0 yapmaktan kaçının; herkesin aynı anda vurması Let's Encrypt altyapısını gereksiz yorar.
-
Kendinize bir güvenlik ağı kurun. Hesabınıza geçerli bir e-posta tanımlıysa Let's Encrypt süresi dolmaya yakın uyarı gönderir. Bunu değiştirmek isterseniz certbot update_account --email adres@ornek.com komutunu kullanabilirsiniz. Ben ayrıca ayda bir certbot certificates çıktısına bakıp kalan gün sayısını kontrol etmeyi alışkanlık yaptım; on saniyelik iş, çok baş ağrısı kurtarıyor.
-
İlk gerçek yenilemeyi bekleyin ve doğrulayın. Tarih 60. günü geçtiğinde tarayıcıda kilit simgesine tıklayıp sertifikanın yeni geçerlilik tarihini görün. Ya da terminalden: echo | openssl s_client -connect alanadi.com:443 2>/dev/null | openssl x509 -noout -dates
Sık yapılan hatalar
- Servisi yeniden yüklemeyi unutmak. Dosya diskte yenilenmiş, tarayıcı hâlâ eski sertifikayı görüyorsa sebebi neredeyse her zaman budur. Deploy hook'unuzu kontrol edin.
- 80 portunu kapatmak. HTTP-01 doğrulaması 80 portundan geçer. "Nasılsa HTTPS var" diye güvenlik duvarında 80'i kapatırsanız yenileme sessizce başarısız olur. Yönlendirme (redirect) yapmak sorun değil, portu tamamen kapatmak sorundur.
- Webroot dizinini taşımak. Site kökünü değiştirdiğinizde renewal conf dosyasındaki webroot yolu eskisini göstermeye devam eder. Sunucu yapılandırmasını her elden geçirişinizde dry run yapmayı alışkanlık edinin.
- .well-known dizinini engellemek. Nginx'te nokta ile başlayan dizinleri toptan reddeden bir kural yazdıysanız doğrulama dosyasına erişilemez. /.well-known/acme-challenge/ yolunu bu kuralın dışında bırakın.
- Sınıra çarpmak. Deneme yaparken canlı sunucuya arka arkaya istek atmak, aynı alan adı için haftalık limiti doldurmanıza yol açar. Test için mutlaka --dry-run ya da staging ortamını kullanın.
-
© 2026 Ağ ve Bulut