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.

  1. Cron düzenleyicisini açın:

bash

KopyalaDüzenle

sudo crontab -e

  1. Aşağıdaki satırı ekleyin:

cron

KopyalaDüzenle

0 3 * * * certbot renew –quiet –post-hook “systemctl reload nginx”

Burada:

  1. 0 3 * * * ifadesi her gece saat 03:00’te çalıştırmayı belirtir.
  2. –quiet sadece hata durumunda çıktı verir.
  3. –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.

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

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

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

  1. Certbot’u sunucunuza kurun ve ilk sertifikayı alın.
  2. Cronjob veya systemd timer ile her gün yenileme kontrolü yapın.
  3. Yenileme sonrası web sunucusunu yeniden yükleyecek komutu ekleyin.
  4. Firewall ve DNS ayarlarınızı gözden geçirin.
  5. İzleme mekanizmalarıyla hata durumlarında hızlıca müdahale edin.