Teknoloji ipuçlarını kendin uygula
İçerik
Son yazılar
Biz kimiz
Ağ, bulut ve sistem yönetimi konularında pratik rehberler. Adım adım açıklamalar ve gerçek sorunlara çözümler sunuyoruz.

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. İ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