Let’s Encrypt ile Otomatik SSL Sertifika Yenileme Rehberi
Let’s Encrypt ile Otomatik SSL Sertifika Yenileme Rehberi
Günümüzde web sitenizin güvenliğini sağlamak, kullanıcı verilerini korumak ve arama motorlarında ön plana çıkmak için HTTPS kullanmak neredeyse zorunlu hale geldi. Let’s Encrypt, ücretsiz ve açık kaynaklı SSL sertifikaları sunarak bu süreci herkes için erişilebilir kılıyor. Ancak bir sertifika aldığınızda süresi 90 günle sınırlı; zamanında yenilemezseniz siteniz “güvensiz” olarak işaretlenebilir. Bu rehberde, Let’s Encrypt sertifikanızı sorunsuz şekilde kurup otomatik yenilemek için adım adım izleyebileceğiniz yöntemleri anlatacağım.
Let’s Encrypt’e Hızlı Bakış
Let’s Encrypt; Internet Security Research Group (ISRG) tarafından yönetilen, ACME protokolünü kullanarak ücretsiz SSL/TLS sertifikası sağlayan bir hizmet. Temel avantajları:
- Ücretsiz: Sertifika maliyeti yok, bütçenizi başka alanlara ayırabilirsiniz.
- Otomasyon Dostu: Certbot gibi araçlarla kurulum ve yenileme adımları otomatikleştirilebilir.
- Açık Kaynak: Kod ve dokümantasyon şeffaf, topluluk desteği güçlü.
Sertifika süresi yalnızca 90 gün olduğundan, otomatik yenileme mekanizması kurmak hem zaman kazandırır hem de bağlantı güvenliğini kesintisiz sürdürür.
Neden Otomatik Yenileme Şart?
- Süre Aşımı Riski: Manuel yenileme unutulursa sertifikanızın süresi dolabilir, ziyaretçiler “Güvensiz site” uyarısıyla karşılaşır.
- Operasyonel Kolaylık: Cronjob veya systemd timer ile belirlediğiniz aralıkta sertifika tazelenir, müdahale gerektirmez.
- SEO Avantajı ve Güven: Sürekli HTTPS kullanımı, Google sıralamasında olumlu etki yapar; kullanıcılar da güvenli bağlantıya daha fazla güven duyar.
Certbot Kurulumu
Let’s Encrypt ile otomatik yenileme yapmak için en popüler araç Certbot. İşletim sisteminize göre paket yöneticisiyle kurulum adımları aşağıdaki gibi.
Ubuntu / Debian
bash
KopyalaDüzenle
sudo apt update
sudo apt install certbot python3-certbot-nginx # Nginx kullanıyorsanız
sudo apt install certbot python3-certbot-apache # Apache kullanıyorsanız
CentOS / RHEL
bash
KopyalaDüzenle
sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx # Nginx için
sudo yum install certbot python3-certbot-apache # Apache için
Kurulum tamamlandıktan sonra, aşağıdaki komutla sertifikanızı ilk kez oluşturabilirsiniz. Örnek Nginx:
bash
KopyalaDüzenle
sudo certbot –nginx -d ornek-site.com -d www.ornek-site.com
Apache için:
bash
KopyalaDüzenle
sudo certbot –apache -d ornek-site.com -d www.ornek-site.com
Bu aşamada Certbot otomatik olarak web sunucusu yapılandırmanızı algılar, gerekli düzenlemeleri yapar ve HTTPS yönlendirmesini sağlar.
Otomatik Yenileme İçin Cronjob Ayarı
Certbot, varsayılan olarak kurulduğunda /etc/cron.d/certbot dosyasını ekleyerek günde iki kez yenileme kontrolü yapar. Ancak özel ihtiyaçlarınıza göre kendi cronjob’unuzu da tanımlayabilirsiniz.
- Cron düzenleyicisini açın:
bash
KopyalaDüzenle
sudo crontab -e
- Aşağıdaki satırı ekleyin:
cron
KopyalaDüzenle
0 3 * * * certbot renew –quiet –post-hook “systemctl reload nginx”
Burada:
- 0 3 * * * ifadesi her gece saat 03:00’te çalıştırmayı belirtir.
- –quiet sadece hata durumunda çıktı verir.
- –post-hook “systemctl reload nginx” komutuyla yenilemeden sonra Nginx yeniden yüklenir. Apache kullanıyorsanız systemctl reload apache2 ya da systemctl reload httpd yazabilirsiniz.
Systemd Timer ile Otomasyon
Eğer sunucunuzda systemd timer kullanmayı tercih ediyorsanız, hem cronjob yönetimine gerek kalmaz hem de zamanlama daha okunaklı olur.
- Timer dosyasını oluşturun:
bash
KopyalaDüzenle
sudo tee /etc/systemd/system/certbot-renew.timer <<EOF
[Unit]
Description=Certbot renew timer
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
EOF
- Servis dosyasını ekleyin:
bash
KopyalaDüzenle
sudo tee /etc/systemd/system/certbot-renew.service <<EOF
[Unit]
Description=Certbot renew service
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew –quiet –post-hook “systemctl reload nginx”
EOF
- Timer’ı etkinleştirin ve başlatın:
bash
KopyalaDüzenle
sudo systemctl enable certbot-renew.timer
sudo systemctl start certbot-renew.timer
systemctl list-timers komutuyla zamanlayıcınızı ve bir sonraki çalıştırma zamanını görebilirsiniz.
Web Sunucusu Entegrasyonu
Otomatik yenileme sonrası web sunucusunun yeniden yüklenmesi, yeni sertifikanın aktif hale gelmesi için kritik. Aşağıda Nginx ve Apache örnekleri var.
Nginx
Nginx konfigürasyonunuzda sertifika yolları şu şekilde tanımlanmış olmalı:
nginx
KopyalaDüzenle
server {
listen 80;
server_name ornek-site.com www.ornek-site.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name ornek-site.com www.ornek-site.com;
ssl_certificate /etc/letsencrypt/live/ornek-site.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ornek-site.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
root /var/www/ornek-site;
index index.html index.php;
…
}
Yenilemeden sonra çalışacak komut:
bash
KopyalaDüzenle
systemctl reload nginx
Apache
Apache yapılandırmasında <VirtualHost> bloğu içinde:
apache
KopyalaDüzenle
<VirtualHost *:443>
ServerName ornek-site.com
DocumentRoot /var/www/ornek-site
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/ornek-site.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ornek-site.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
…
</VirtualHost>
Apache’yi yenilemek için:
bash
KopyalaDüzenle
systemctl reload apache2 # Debian/Ubuntu
# veya
systemctl reload httpd # CentOS/RHEL
Olası Sorunlar ve Çözümleri
- Firewall engeli: Port 80 ve 443 açık değilse yenileme başarısız olabilir. UFW kullanıyorsanız sudo ufw allow 80,443/tcp komutuyla gerekli izinleri verin.
- DNS güncellemeleri: Yeni domain eklediğinizde AAAA veya A kayıtlarının yayılması zaman alabilir. Bu durumda “challenge” doğrulaması başarısız olabilir; DNS TTL’lerini kontrol edin.
- Yetki hataları: Certbot’un çalıştığı kullanıcı gerekli dosyalara erişemiyorsa Permission denied hatası alabilirsiniz. Sertifika dizinleri genellikle root altında olduğundan komutları sudo ile çalıştırın.
- Cronjob çıktılarını görmek: –quiet yerine –debug veya –verbose ile detaylı rapor alabilirsiniz.
İzleme ve Bildirim
Yenileme işlemlerinde hata olması durumunda hemen haberdar olmak faydalı. Basit bir mail bildirimi için cronjob’a şu parametre eklenebilir:
cron
KopyalaDüzenle
0 3 * * * certbot renew –post-hook “systemctl reload nginx” 2>&1 | mail -s “Certbot Yenileme Raporu” you@example.com
Daha kurumsal bir çözüm istiyorsanız Prometheus ve Grafana entegrasyonu ya da üçüncü taraf izleme araçları ile yenileme adımını takip edebilirsiniz.
Sonuç ve İpuçları
Let’s Encrypt ile otomatik yenileme sistemi kurmak, web sitenizin kesintisiz olarak güvenli kalmasını sağlar. Özetle:
- Certbot’u sunucunuza kurun ve ilk sertifikayı alın.
- Cronjob veya systemd timer ile her gün yenileme kontrolü yapın.
- Yenileme sonrası web sunucusunu yeniden yükleyecek komutu ekleyin.
- Firewall ve DNS ayarlarınızı gözden geçirin.
- İzleme mekanizmalarıyla hata durumlarında hızlıca müdahale edin.