İçeriğe geç

Güvenlik

Let's Encrypt ile ücretsiz sertifika (Certbot)

Certbot ile Nginx üzerinde Let's Encrypt sertifikası alma, otomatik yenilemeyi sınama ve sık hataları giderme.

2 dk okumaGüncelleme
İçindekiler 7

Let's Encrypt, kâr amacı gütmeyen bir sertifika otoritesidir ve alan adı doğrulamalı (DV) sertifikaları ücretsiz verir. Sertifikalar kısa ömürlüdür; bu nedenle yenilemenin otomatik çalışması beklenir. Sertifikaların ne olduğu için SSL/TLS nedir makalesine bakın.

Ön koşullar

  • Alan adının A (ve kullanıyorsanız AAAA) kaydı sunucunuzun IP adresini göstermeli. Bkz. DNS kayıt türleri.
  • 80 ve 443 numaralı portlar internetten erişilebilir olmalı (güvenlik duvarı dahil).
  • Alan adı için çalışan bir Nginx sanal host'u olmalı. Bkz. Nginx ile sanal host.

Certbot kurulumu

Certbot'un resmi önerisi snap paketidir; dağıtımınızın deposundaki paket de kullanılabilir. Ubuntu'da depo paketiyle:

sudo apt update
sudo apt install certbot python3-certbot-nginx

Güncel kurulum yöntemi için Certbot'un kendi belgelerine bakın; sürümler arasında farklılık olabilir.

Sertifika alma

sudo certbot --nginx -d ornek.com -d www.ornek.com

Certbot alan adı sahipliğini doğrular (HTTP-01 sınaması), sertifikayı alır ve Nginx yapılandırmasını düzenler. Sertifika dosyaları /etc/letsencrypt/live/ornek.com/ altında bulunur:

Dosyaİçerik
fullchain.pemSertifika + ara sertifikalar
privkey.pemÖzel anahtar, paylaşmayın

Otomatik yenileme

Paket kurulumu genellikle bir systemd zamanlayıcısı veya cron girdisi ekler. Kontrol edin:

systemctl list-timers | grep certbot

Yenileme sürecini gerçek sertifikaya dokunmadan sınamak için:

sudo certbot renew --dry-run

Bu komut hata veriyorsa gerçek yenileme de başarısız olacaktır; sorunu şimdi çözün.

Wildcard sertifika

*.ornek.com için HTTP-01 yeterli değildir; DNS-01 sınaması gerekir, yani doğrulama için DNS'e bir TXT kaydı eklenmelidir. Otomatik yenilemenin çalışması için DNS sağlayıcınızın API'sine uygun bir Certbot eklentisi gerekir.

Sık hatalar

  • Timeout during connect / Connection refused: 80. port kapalı ya da alan adı başka bir IP'yi gösteriyor.
  • Too many requests: Let's Encrypt, kısa sürede çok sayıda başarısız veya yinelenen istekte hız sınırı uygular. Sınırlar güncel belgelerinde yazılıdır; bekleyip yeniden deneyin.
  • Nginx yapılandırması hatalı: sudo nginx -t ile sınayın.
  • IPv6 AAAA kaydı yanlış: Sunucu IPv6'da dinlemiyorsa doğrulama başarısız olabilir.

Yenileme sonrası

Nginx'in yeni sertifikayı okuması için yeniden yüklenmesi gerekir; Certbot'un Nginx eklentisi bunu genellikle kendisi yapar. Elle gerekirse: sudo systemctl reload nginx.

Bu makale genel bilgi verir; sürümler ve dağıtımlar arasında komutlar değişebilir. Üretim sunucusunda uygulamadan önce kendi ortamınızda deneyin.

Bize yazın