Let’s Encrypt Sertifikalarını Otomatik Yenileme: Cronjob ve Systemd ile Sıfır Kesinti Stratejisi
Let’s Encrypt sertifikalarının manuel yenileme sürecini otomatikleştirerek sunucu güvenliğinizi artırın. Cronjob ve systemd yöntemleriyle kesintisiz sertifika yenileme rehberi.
Caner Serbest
Sistem ve Altyapı
5 min read
Let’s Encrypt Sertifikalarını Otomatik Yenileme: Cronjob ve Systemd ile Sıfır Kesinti Stratejisi
Günümüzde web sitelerinin güvenliği sadece veri korumasıyla değil, aynı zamanda kullanıcı güvenini artırmakla da doğrudan ilişkilidir. Let’s Encrypt, ücretsiz ve otomatik sertifika sağlayıcısı olarak milyonlarca web sitesinin HTTPS protokolüne geçiş yapmasına olanak tanıyor. Ancak sertifikaların 90 günlük kısa ömürleri nedeniyle manuel yenileme süreci zamanla yorucu hale gelebiliyor.
Bu rehberde, Let’s Encrypt sertifikalarınızı otomatik olarak yenilemenin ve sıfır kesinti sağlamanın iki farklı yöntemini ele alacağız:
- Cronjob ile otomatik yenileme
- Systemd timer ile otomatik yenileme
Her iki yöntem de sunucunuzun güvenliğini artırırken, size zaman kazandırarak teknik operasyonlarınızı kolaylaştıracaktır.
Neden Otomatik Yenileme Gerekiyor?
Let’s Encrypt sertifikaları 90 günlük bir ömre sahiptir. Bu süreçte aşağıdaki sorunlarla karşılaşabilirsiniz:
- Manuel yenileme unutulabilir: Sertifika süresi dolmadan yenilemeyi unutmak, web sitenizin HTTPS bağlantısının kesilmesine neden olabilir.
- Zaman kaybı: Manuel yenileme süreci, özellikle çok sayıda domaine sahip olduğunuzda zaman alıcıdır.
- Kesinti riski: Sertifikanın süresi dolduğunda, kullanıcılarınız “Güvenli bağlantı yok” hatasıyla karşılaşabilir.
Otomatik yenileme, bu riskleri ortadan kaldırarak süreci güvenilir ve verimli hale getirir.
Ön Koşullar
Bu rehberde aşağıdaki araçların kurulu olduğunu varsayıyoruz:
- Certbot: Let’s Encrypt sertifikalarını yöneten resmi CLI aracı.
- Nginx/Apache: Web sunucunuz.
- Linux sunucu: Ubuntu/Debian, CentOS/RHEL veya diğer Linux dağıtımları.
Certbot’u henüz kurmadıysanız, aşağıdaki komutlarla kolayca kurabilirsiniz:
# Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
# CentOS/RHEL
sudo yum install epel-release -y
sudo yum install certbot python3-certbot-nginx -y
Yöntem 1: Cronjob ile Otomatik Yenileme
Cronjob, Linux sistemlerinde belirli aralıklarla komut çalıştırmak için kullanılan bir zamanlayıcıdır. Let’s Encrypt sertifikalarını otomatik yenilemek için ideal bir yöntemdir.
Adım 1: Certbot’un Otomatik Yenilemeyi Desteklediğinden Emin Olun
Certbot, sertifikaları otomatik yenilemek için --renew-hook ve --deploy-hook seçeneklerini destekler. Öncelikle sertifikalarınızın otomatik yenilemeye uygun olup olmadığını kontrol edin:
sudo certbot renew --dry-run
Bu komut, sertifikalarınızın otomatik yenilemeye hazır olup olmadığını test eder. Eğer hata alırsanız, web sunucunuzun yapılandırmasını gözden geçirin.
Adım 2: Cronjob Oluşturun
Cronjob oluşturmak için crontab -e komutunu kullanın:
sudo crontab -e
Aşağıdaki satırı ekleyin (örneğin, her pazartesi saat 03:00’te çalışacak şekilde):
0 3 * * 1 /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"
Komutun açıklaması:
0 3 * * 1: Her pazartesi saat 03:00’te çalışır./usr/bin/certbot renew --quiet: Sertifikaları yeniler ve çıktıyı gizler.--post-hook "systemctl reload nginx": Yenileme tamamlandıktan sonra Nginx’i yeniden yükler.
Not: Eğer Apache kullanıyorsanız, systemctl reload nginx yerine systemctl reload apache2 kullanın.
Adım 3: Cronjob’un Çalıştığını Doğrulayın
Cronjob’un düzgün çalıştığını doğrulamak için aşağıdaki komutu çalıştırın:
sudo tail -f /var/log/syslog | grep certbot
Bu komut, Certbot’un çalışma çıktısını izlemenizi sağlar. Eğer hata alırsanız, log dosyalarını inceleyerek sorunu çözebilirsiniz.
Yöntem 2: Systemd Timer ile Otomatik Yenileme
Systemd timer, Linux sistemlerinde cronjob’a alternatif olarak kullanılan bir zamanlayıcıdır. Cronjob’a göre daha esnek ve yönetimi daha kolaydır.
Adım 1: Systemd Servis Dosyası Oluşturun
Öncelikle, Certbot’un yenileme komutunu çalıştıracak bir systemd servis dosyası oluşturun. /etc/systemd/system/certbot-renew.service dosyasını açın:
sudo nano /etc/systemd/system/certbot-renew.service
Aşağıdaki içeriği ekleyin:
[Unit]
Description=Let's Encrypt Certificate Renewal
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"
Not: Apache kullanıyorsanız, --post-hook bölümünü systemctl reload apache2 olarak değiştirin.
Adım 2: Systemd Timer Dosyası Oluşturun
Ardından, systemd timer dosyasını oluşturun. /etc/systemd/system/certbot-renew.timer dosyasını açın:
sudo nano /etc/systemd/system/certbot-renew.timer
Aşağıdaki içeriği ekleyin:
[Unit]
Description=Run certbot renew every Monday at 3 AM
[Timer]
OnCalendar=Mon *-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
Bu ayar, her pazartesi saat 03:00’te Certbot’un çalışmasını sağlar.
Adım 3: Systemd Timer’ı Etkinleştirin
Systemd timer’ı etkinleştirmek ve başlatmak için aşağıdaki komutları çalıştırın:
sudo systemctl daemon-reload
sudo systemctl enable certbot-renew.timer
sudo systemctl start certbot-renew.timer
Adım 4: Timer’ın Çalıştığını Doğrulayın
Timer’ın düzgün çalıştığını doğrulamak için aşağıdaki komutu çalıştırın:
sudo systemctl list-timers | grep certbot
Bu komut, Certbot timer’ının ne zaman çalışacağını gösterir.
Hangi Yöntemi Seçmelisiniz?
Her iki yöntemin de avantajları ve dezavantajları vardır:
| Özellik | Cronjob | Systemd Timer |
|---|---|---|
| Kurulum Kolaylığı | Basit ve hızlı | Biraz daha karmaşık |
| Esneklik | Sınırlı | Daha esnek (örneğin, koşullu çalıştırma) |
| Hata Ayıklama | Log dosyalarını incelemek gerekiyor | Systemd logları daha yapılandırılmış |
| Performans | Hafif | Hafif |
| Destek | Tüm Linux dağıtımlarında çalışır | Systemd destekleyen dağıtımlarda çalışır |
Öneri: Eğer sisteminizde Systemd kullanıyorsanız (modern Linux dağıtımlarında varsayılan olarak gelir), Systemd timer kullanmanız daha avantajlı olacaktır. Diğer durumlarda Cronjob tercih edilebilir.
Sık Karşılaşılan Sorunlar ve Çözümleri
1. Sertifika Yenilenemiyor
Sorun: certbot renew --dry-run komutu başarısız oluyor.
Çözüm:
- Web sunucunuzun (Nginx/Apache) yapılandırmasını kontrol edin. Örneğin, Nginx için sertifikaların bulunduğu dizine erişim iznini doğrulayın.
- Let’s Encrypt’in API’lerine erişimde sorun olup olmadığını kontrol edin.
ping acme-v02.api.letsencrypt.orgkomutunu çalıştırarak bağlantıyı test edin.
2. Yenileme Komutu Hatasız Çalışıyor Ama Web Sitesi HTTPS Olmuyor
Sorun: Sertifika yenileniyor ama web sitesinde HTTPS bağlantısı kesiliyor.
Çözüm:
--post-hookbölümünde web sunucunuzu yeniden yüklediğinizden emin olun. Örneğin, Nginx içinsystemctl reload nginxkullanın.- Web sunucunuzun yapılandırma dosyasında sertifika yollarının doğru olduğundan emin olun.
3. Log Dosyalarında Hata Mesajları Görülüyor
Sorun: Log dosyalarında Permission denied veya benzeri hatalar alıyorsunuz.
Çözüm:
- Certbot komutlarını
sudoile çalıştırdığınızdan emin olun. /var/log/letsencrypt/dizinine erişim iznini kontrol edin.
Ekstra İpuçları
1. Sertifika Yenileme Durumunu Kontrol Edin
Sertifikalarınızın ne zaman yenileneceğini ve geçerlilik sürelerini kontrol etmek için aşağıdaki komutu çalıştırın:
sudo certbot certificates
Bu komut, tüm sertifikalarınızın listesini ve yenileme tarihlerini gösterir.
2. Otomatik Yenilemeyi Manuel Olarak Test Edin
Otomatik yenilemenin düzgün çalıştığını doğrulamak için aşağıdaki komutu çalıştırın:
sudo certbot renew --force-renewal
Bu komut, sertifikaları zorla yeniler ve --post-hook komutunun çalışıp çalışmadığını test eder.
3. Birden Fazla Domain İçin Yenileme
Birden fazla domain için sertifika aldıysanız, Certbot otomatik olarak tüm domainleri yenileyecektir. Örneğin:
sudo certbot renew --quiet --post-hook "systemctl reload nginx"
Bu komut, tüm sertifikalarınızı yeniler.
Sonuç
Let’s Encrypt sertifikalarını otomatik yenilemek, web sitenizin güvenliğini artırırken size zaman kazandırır. Bu rehberde ele aldığımız Cronjob ve Systemd timer yöntemleri, sertifikalarınızın sürekli olarak yenilenmesini sağlayarak sıfır kesinti garantisi sunar.
Özetle:
- Certbot’un otomatik yenilemeye hazır olduğundan emin olun.
- Cronjob veya Systemd timer kullanarak yenilemeyi otomatikleştirin.
- Düzenli olarak sertifika durumunu kontrol edin.
- Olası hataları önceden tespit edin ve çözümleyin.
Bu adımları takip ederek, web sitenizin güvenli ve kesintisiz bir şekilde çalışmasını sağlayabilirsiniz. Unutmayın, güvenlik sadece veri korumasıyla değil, aynı zamanda kullanıcı deneyimiyle de ilgilidir.
Kaynakça
Eğer bu rehberde karşılaştığınız sorunları çözemediyseniz, yorum bölümünde sorularınızı bırakabilirsiniz. İyi çalışmalar! 🚀
Bu yazı Mistral ile otomatik oluşturulmuştur.