aslain.dev
0%
01 Hizmetler 02 Hakkımda 03 Projeler 04 Stack 05 Blog 06 İletişim
← Tüm makaleler Araçlar & DevOps

Certbot SSL: Let's Encrypt ile Otomatik Sertifika

Certbot SSL kurulumu, bir VPS'te HTTPS'i ücretsiz ve otomatik hale getirmenin en kısa yoludur. Certbot, Let's Encrypt'in resmî istemcisidir; sertifikayı alır, web sunucusu yapılandırmasını düzenler ve en önemlisi sertifikayı süresi dolmadan kendiliğinden yeniler. Bu yazıda aracın çalışma mantığını, hangi eklentiyi ne zaman seçeceğinizi, joker sertifika için DNS doğrulamasını, deploy hook'larını ve yenilemeyi gerçekten güvene almanın yolunu adım adım anlatıyorum.

Certbot nasıl çalışır: doğrulama ve eklenti mantığı

Certbot, alan adının gerçekten sizin kontrolünüzde olduğunu Let's Encrypt'e kanıtlamak için bir challenge (meydan okuma) çözer. İki yaygın yöntem vardır: HTTP-01 doğrulaması 80 portu üzerinden geçici bir dosyaya erişerek, DNS-01 ise alan adınıza geçici bir TXT kaydı ekleyerek doğrular. Tek alan adları için genelde HTTP-01, joker (*.alanadi.com) sertifikalar içinse zorunlu olarak DNS-01 kullanılır.

Certbot bu işi eklentiler aracılığıyla yapar. İki tür eklenti vardır: authenticator (doğrulamayı yapan, örn. nginx, apache, webroot, standalone) ve installer (sertifikayı yapılandırmaya yerleştiren, örn. nginx, apache). nginx ve apache eklentileri her iki rolü de üstlendiği için en kolay yoldur.

Certbot kurulumu

Önerilen kurulum snap paketidir; her zaman en güncel sürümü getirir ve yenileme zamanlayıcısını otomatik kurar. Ubuntu/Debian üzerinde:

sudo apt update
sudo apt install snapd -y
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Snap istemiyorsanız dağıtım deposundan da kurabilirsiniz: sudo apt install certbot python3-certbot-nginx (Apache için python3-certbot-apache). Sürüm biraz eski olabilir ama çalışır. Kurulumu certbot --version ile doğrulayın.

En kolay yol: nginx/apache eklentisi

Nginx çalışan bir sunucuda tek komut hem sertifikayı alır hem de HTTPS bloğunu yapılandırmaya ekler:

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

Certbot ilk çalıştırmada bir e-posta (yenileme uyarıları için) ve hizmet şartlarını onaylamanızı ister. Ardından HTTP'yi HTTPS'e yönlendirmek isteyip istemediğinizi sorar — "Redirect" seçeneğini seçin. Apache için mantık aynıdır, yalnızca eklenti değişir:

sudo certbot --apache -d alanadi.com -d www.alanadi.com

Certbot Apache tarafında mod_ssl ile mod_rewrite modüllerini etkinleştirir, bir SSL sanal sunucu dosyası oluşturur ve yönlendirme kuralını ekler. İşlem bittikten sonra Nginx'te sudo nginx -t && sudo systemctl reload nginx ile yapılandırmayı test edip yeniden yükleyin.

certonly ve webroot: yapılandırmaya dokunmadan sertifika almak

Bazen Certbot'un web sunucusu dosyalarını düzenlemesini istemezsiniz; örneğin yapılandırma karmaşıktır ya da bir reverse proxy ile çalışıyorsunuzdur. Bu durumda certonly alt komutuyla yalnızca sertifikayı alır, kurulumu elle yaparsınız. En güvenli authenticator webroot'tur; çünkü çalışan web sunucusunu durdurmadan, doğrulama dosyalarını mevcut kök dizine yazar:

sudo certbot certonly --webroot \
  -w /var/www/alanadi \
  -d alanadi.com -d www.alanadi.com

Burada -w sitenizin belge kökünü (document root) gösterir; Certbot doğrulama dosyalarını oraya /.well-known/acme-challenge/ altına koyar. Henüz çalışan bir web sunucusu yoksa (örneğin 80 portu boşsa) standalone eklentisini kullanabilirsiniz; bu, doğrulama süresince kendi geçici sunucusunu ayağa kaldırır:

sudo certbot certonly --standalone -d alanadi.com

Alınan dosyalar /etc/letsencrypt/live/alanadi.com/ altında yer alır: fullchain.pem (sertifika + ara zincir) ve privkey.pem (özel anahtar). Nginx yapılandırmanızda bu iki yolu ssl_certificate ve ssl_certificate_key direktiflerine verirsiniz.

Joker sertifika: DNS-01 doğrulaması

Tek bir sertifikayla *.alanadi.com altındaki tüm alt alan adlarını kapsamak isterseniz joker (wildcard) sertifika gerekir ve Let's Encrypt bunu yalnızca DNS-01 ile verir. En basit hâli elle doğrulamadır:

sudo certbot certonly --manual \
  --preferred-challenges dns \
  -d "*.alanadi.com" -d "alanadi.com"

Certbot size bir TXT kaydı (_acme-challenge.alanadi.com) verir; bunu DNS panelinize ekler, yayılmasını bekler ve devam edersiniz. Elle yapmak yenileme sırasında her seferinde araya girmeyi gerektirdiğinden, üretimde DNS sağlayıcınızın resmî eklentisini kullanmak çok daha pratiktir. Örneğin Cloudflare için bir API tokenıyla:

sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials ~/.secrets/cloudflare.ini \
  -d "*.alanadi.com" -d "alanadi.com"

Bu sayede TXT kaydı otomatik eklenir ve silinir; joker sertifika yenilemesi de tamamen otomatikleşir.

Otomatik yenileme ve deploy hook

Let's Encrypt sertifikaları 90 gün geçerlidir; bu yüzden Certbot'un en değerli işi yenilemedir. Snap veya paket kurulumu, günde iki kez çalışan ve sertifikanın son 30 gününe girince yenileyen bir systemd timer (ya da cron görevi) kurar. Aktif olduğunu doğrulayın:

systemctl list-timers | grep certbot

Yenilemenin sorunsuz çalışacağını gerçekten yenilemeden test etmek için kuru çalıştırma şarttır:

sudo certbot renew --dry-run

Bu komut hata vermeden tamamlanıyorsa yenileme güvendedir. Önemli bir nokta: yenilemeden sonra web sunucusunun yeni sertifikayı belleğe yüklemesi gerekir. nginx/apache eklentileri bunu kendiliğinden yapar, ama certonly ile elle kurduysanız bir deploy hook tanımlayın:

sudo certbot certonly --webroot -w /var/www/alanadi \
  -d alanadi.com \
  --deploy-hook "systemctl reload nginx"

Deploy hook yalnızca sertifika gerçekten yenilendiğinde çalışır, bu yüzden gereksiz yere servis yeniden yüklemez. Mevcut bir sertifikanın yenileme ayarları /etc/letsencrypt/renewal/alanadi.com.conf dosyasında tutulur; deploy hook'u oraya da elle ekleyebilirsiniz.

Sık karşılaşılan hatalar

  • Doğrulama başarısız (timeout): Genellikle DNS henüz sunucunuza işaret etmiyordur ya da 80/443 portları kapalıdır. dig +short alanadi.com ile IP'yi, güvenlik duvarınızla portları kontrol edin.
  • Rate limit: Let's Encrypt haftalık limitler uygular. Denemeleri ayarlarken --dry-run veya --staging ortamını kullanın; bunlar gerçek limiti tüketmez.
  • "too many redirects": Hem Certbot hem de bir CDN (örn. Cloudflare "Flexible SSL") yönlendirme yapıyorsa döngü oluşur. CDN'de SSL modunu "Full (strict)" yapın.
  • Yenileme sessizce başarısız: certbot renew --dry-run düzenli çalıştırın; webroot yolu değiştiyse veya hook bozulduysa burada görünür.

Sık Sorulan Sorular

Certbot ile Let's Encrypt arasındaki fark nedir?

Let's Encrypt, sertifikayı veren ücretsiz sertifika otoritesidir (CA). Certbot ise bu CA ile ACME protokolü üzerinden konuşan istemci yazılımıdır: doğrulamayı yapar, sertifikayı indirir ve yeniler. Certbot dışında acme.sh gibi başka istemciler de aynı işi görür.

Tek bir sertifikaya kaç alan adı eklenebilir?

Aynı komutta birden çok -d vererek bir sertifikaya birden fazla alan adı (SAN) ekleyebilirsiniz; Let's Encrypt sertifika başına 100 ada kadar destekler. Çok sayıda alt alan adınız varsa joker sertifika genelde daha temiz bir çözümdür.

Sertifikayı iptal etmem gerekirse ne yaparım?

Özel anahtar sızdıysa sudo certbot revoke --cert-name alanadi.com ile iptal edip ardından certbot delete ile yenileme yapılandırmasını temizleyebilirsiniz. Normal kullanımda iptale gerek yoktur; süresi dolan sertifikalar zaten geçerliliğini yitirir.

Sunucunuzda Certbot SSL'i sıfırdan kurmak mı istiyorsunuz? Eklenti seçimi, joker sertifika, deploy hook ve kesintisiz yenileme dahil tüm süreci sizin için ayarlayabilirim — benimle iletişime geçin.

Bu kategorideki tüm yazılar →

Devamı için