Let's Encrypt nasıl çalışır?
Let's Encrypt, ACME adı verilen bir protokolle otomatik sertifika veren, kâr amacı gütmeyen bir sertifika otoritesidir. Sunucunuzda çalışan bir ACME istemcisi, alan adının sizin kontrolünüzde olduğunu kanıtlar, sertifikayı alır ve süresi dolmadan yeniler. En yaygın istemci Certbot'tur; acme.sh gibi başka istemciler ve panellerin yerleşik araçları da aynı protokolü kullanır.
Sertifikaların geçerlilik süresi kısadır; uzun süredir 90 gün olarak uygulanıyordu ve Let's Encrypt bu süreyi kademeli olarak kısaltma planını duyurdu. Güncel süreyi ve takvimi Let's Encrypt'in resmi duyurularından kontrol edin. Bu kısa süre bir eksiklik değil, bilinçli bir tercihtir: yenilemeyi otomatikleştirmeye zorlar. Kendi yenileme düzeninizi, süre ne olursa olsun çalışacak şekilde kurmak en sağlıklısıdır.
Panel kullanıyorsanız (cPanel, Plesk, DirectAdmin) bu işlerin çoğunu panel arayüzden yapar; bu rehberdeki kontrol ve hata giderme bölümleri yine işinize yarar. Panel tarafını panel karşılaştırması rehberinde ele aldık.
Let's Encrypt hangi sertifikayı verir?
Let's Encrypt yalnızca alan adı doğrulamalı (DV) sertifika verir. Bu sertifika, alan adının kontrolünün sizde olduğunu kanıtlar ve tarayıcıda diğer sertifikalarla aynı kilit simgesini gösterir. Şirket bilgisinin sertifikaya işlendiği kurum doğrulamalı (OV) veya genişletilmiş doğrulamalı (EV) sertifikalar gerekiyorsa, bunlar için ticari bir sertifika otoritesine başvurmanız gerekir. Çoğu web sitesi, blog ve e-ticaret sitesi için DV sertifika teknik açıdan yeterlidir; tercih genellikle kurumsal veya sözleşmesel gerekliliklere bağlıdır.
Ön koşullar
- Alan adının A (ve kullanıyorsanız AAAA) kaydı bu sunucuyu göstermeli. IPv6 kaydı varsa ama sunucu IPv6 üzerinden yanıt vermiyorsa doğrulama başarısız olabilir.
- HTTP doğrulaması kullanacaksanız 80 numaralı port dışarıya açık olmalı. Güvenlik duvarı ayarları için VPS güvenlik ayarları rehberine bakın.
- Web sunucusu (Nginx veya Apache) çalışıyor ve alan adı için bir sanal sunucu tanımı bulunuyor olmalı.
- DNS'te bir CAA kaydı tanımladıysanız Let's Encrypt'e izin vermeli (issue "letsencrypt.org"). CAA kaydı hiç yoksa her otorite sertifika verebilir.
Certbot kurulumu ve ilk sertifika
Certbot'u kurmanın birkaç yolu vardır: Certbot projesinin birçok sistem için önerdiği snap paketi, Debian/Ubuntu depolarındaki paketler (certbot ile birlikte python3-certbot-nginx veya python3-certbot-apache) ya da RHEL tabanlı sistemlerde EPEL deposundaki paketler. Güncel kurulum yönergesini Certbot'un resmi sitesinden, işletim sisteminizi ve web sunucunuzu seçerek alın.
Kurulumdan sonra web sunucusu eklentisiyle sertifika almak tek komuttur:
- Nginx: certbot --nginx -d ornek.com -d www.ornek.com
- Apache: certbot --apache -d ornek.com -d www.ornek.com
Eklenti, doğrulama için geçici ayarı yapar, sertifikayı alır ve web sunucusu yapılandırmasına ekler. Yapılandırmanızı kendiniz yönetmek istiyorsanız certonly alt komutu yalnızca sertifikayı alır; dosyaları yapılandırmaya siz eklersiniz. Sertifika dosyaları genellikle /etc/letsencrypt/live/alan-adi/ altında tutulur; yapılandırmada bu klasördeki fullchain.pem ve privkey.pem dosyalarını gösterin, arşiv klasöründeki numaralı dosyaları değil.
İlk denemelerde ve yapılandırma testlerinde --test-cert (staging) seçeneğini kullanın. Let's Encrypt'in canlı ortamında hız sınırları vardır; art arda başarısız denemeler sizi geçici olarak engelleyebilir. Güncel sınırları resmi belgelerden kontrol edin.
Doğrulama yöntemleri: HTTP-01 ve DNS-01
| Yöntem | Nasıl çalışır? | Ne zaman kullanılır? |
|---|---|---|
| HTTP-01 | Sunucuda /.well-known/acme-challenge/ altına geçici bir dosya konur, Let's Encrypt bunu 80 portundan okur. | Tek sunucu, alan adı doğrudan sunucuyu gösteriyor. |
| DNS-01 | Alan adına _acme-challenge adlı geçici bir TXT kaydı eklenir. | Wildcard sertifika, 80 portu kapalı sunucular, birden çok sunucu. |
Wildcard (*.ornek.com) sertifikalar yalnızca DNS-01 ile alınabilir. Otomatik yenileme için DNS sağlayıcınızın API'sini destekleyen bir eklenti gerekir; elle eklenen TXT kaydıyla alınan sertifika, bir sonraki yenilemede yine elle müdahale ister. DNS sağlayıcısının API anahtarını yalnızca root'un okuyabileceği bir dosyada saklayın ve mümkünse yalnızca ilgili alan adını düzenleme yetkisiyle sınırlayın. DNS kayıtlarının yönetimi için domain ve DNS yönetimi sayfamıza bakabilirsiniz.
Otomatik yenilemeyi kurmak ve test etmek
Certbot paketleri çoğu sistemde yenileme için bir systemd zamanlayıcısı ya da cron görevi kurar. Bunun çalıştığından emin olmak için:
- systemctl list-timers çıktısında certbot ile ilgili bir zamanlayıcı arayın; yoksa cron dizinlerini kontrol edin.
- certbot renew --dry-run komutuyla yenilemeyi test ortamında deneyin. Bu komut gerçek sertifikaya dokunmaz.
- Yenilemeden sonra web sunucusunun yeni sertifikayı yüklemesi gerekir. Eklentiyle kurduysanız bu genellikle otomatik yapılır; certonly kullandıysanız --deploy-hook "systemctl reload nginx" gibi bir kanca ekleyin.
- Sertifikayı başka servisler de kullanıyorsa (posta sunucusu gibi) onları da kancaya ekleyin.
Let's Encrypt, süresi dolmak üzere olan sertifikalar için gönderdiği hatırlatma e-postalarını sonlandırdığını duyurdu. Bu yüzden bitiş tarihini dışarıdan izleyen bir kontrol kurmanız artık daha da önemli. Pek çok erişilebilirlik izleme hizmeti SSL bitiş tarihini de izler; kurulum için sunucu kaynak izleme rehberine göz atın.
Sık karşılaşılan yenileme hataları
- Alan adı başka sunucuya taşındı: eski sunucudaki Certbot yenilemeyi denemeye devam eder ve başarısız olur. Kullanılmayan sertifikaları certbot delete ile kaldırın.
- HTTP'den HTTPS'e yönlendirme doğrulamayı bozuyor: yönlendirme genelde sorun çıkarmaz, ama /.well-known/acme-challenge/ yolunu engelleyen ya da yanlış klasöre yönlendiren bir kural doğrulamayı engeller.
- CDN veya ters vekil önde: alan adı bir CDN üzerinden yayınlanıyorsa HTTP doğrulaması sunucunuza ulaşmayabilir. DNS-01 kullanın ya da CDN'in kendi sertifika seçeneğini değerlendirin.
- Yenilendi ama site eski sertifikayı gösteriyor: web sunucusu yeniden yüklenmemiştir; dağıtım kancasını kontrol edin.
- Zincir hatası: yapılandırmada cert.pem yerine fullchain.pem kullanın; aksi halde bazı istemciler sertifikayı doğrulayamaz.
Birden fazla sertifikayı yönetmek
Sunucuda birkaç site barındırdığınızda sertifikaların listesini düzenli kontrol etmek iyi bir alışkanlıktır. certbot certificates komutu, sunucudaki tüm sertifikaları, kapsadıkları alan adlarını ve bitiş tarihlerini gösterir. Var olan bir sertifikaya yeni bir alt alan adı eklemek istediğinizde, aynı --cert-name değeriyle tüm alan adlarını yeniden listeleyerek sertifikayı güncelleyebilirsiniz; her alt alan adı için ayrı sertifika üretmek liste karmaşasına yol açar.
Sitenin dışarıya gerçekte hangi sertifikayı sunduğunu görmek için OpenSSL kullanabilirsiniz: openssl s_client -connect ornek.com:443 -servername ornek.com komutunun çıktısını openssl x509 -noout -dates -subject komutuna yönlendirdiğinizde sertifikanın başlangıç ve bitiş tarihleri ile kime verildiği görünür. Sunucudaki dosya ile dışarıya sunulan sertifika farklıysa sorun genellikle yeniden yükleme ya da yanlış sanal sunucu tanımıdır.
Yenileme kontrol listesi
- Zamanlayıcı etkin ve son çalışması başarılı.
- certbot renew --dry-run hatasız tamamlanıyor.
- Dağıtım kancası web sunucusunu ve sertifikayı kullanan diğer servisleri yeniden yüklüyor.
- Dış izleme, bitiş tarihine belirli bir süre kala uyarı gönderiyor.
- Artık kullanılmayan alan adlarının sertifikaları silinmiş.
HTTPS'e geçtikten sonra
Sertifika kurulduktan sonra tüm HTTP isteklerini kalıcı (301) yönlendirmeyle HTTPS'e taşıyın ve sayfalarda HTTP üzerinden yüklenen görsel, betik gibi karışık içerik kalmadığını tarayıcı konsolundan kontrol edin. HSTS başlığını eklemeyi düşünüyorsanız önce kısa bir süreyle başlayın: HSTS etkinleştikten sonra tarayıcılar belirtilen süre boyunca siteye yalnızca HTTPS ile bağlanır ve sertifika sorunu yaşarsanız ziyaretçiler siteye hiç ulaşamaz.
Web sunucusu tarafındaki ayarlar için Apache, Nginx ve LiteSpeed rehberine, konunun özeti için hosting paneli ve web sunucusu sayfasına dönebilirsiniz. Yenileme hatası alıyorsanız Certbot'un log dosyasındaki ilgili satırlarla birlikte Linux Sunucular bölümünde soru açabilirsiniz.
Forumdaki ilgili bölümler
- Linux SunucularCertbot, web sunucusu ve sertifika sorunları.
- Sunucu/Hosting Bilgi AlışverişiSSL ve HTTPS geçiş deneyimleri.
- Site Güvenliği ve SaldırılarHTTPS, HSTS ve güvenlik başlıkları.
Sık sorulan sorular
Let's Encrypt sertifikası ne kadar süre geçerli?
Sertifikalar kısa ömürlüdür; uzun süre 90 gün olarak uygulandı ve Let's Encrypt süreyi kademeli olarak kısaltma planını duyurdu. Güncel süreyi resmi kaynaktan kontrol edin ve yenilemeyi tamamen otomatik kurun.
Wildcard sertifika nasıl alınır?
Wildcard sertifikalar yalnızca DNS-01 doğrulamasıyla alınabilir. Otomatik yenileme için DNS sağlayıcınızın API'sini destekleyen bir Certbot eklentisi veya başka bir ACME istemcisi kullanın.
certbot renew --dry-run ne işe yarar?
Yenileme sürecini Let's Encrypt'in test ortamında baştan sona dener ve gerçek sertifikalara dokunmaz. Yapılandırmanızda bir sorun varsa yenileme zamanı gelmeden görmenizi sağlar.
Sertifika yenilendi ama tarayıcı hâlâ eski tarihi gösteriyor, neden?
Web sunucusu yeni sertifika dosyasını yüklemek için yeniden yüklenmemiş olabilir. Dağıtım kancası ekleyin veya servisi elle yeniden yükleyin.
Ücretsiz SSL ile ücretli SSL arasında güvenlik farkı var mı?
Şifreleme gücü açısından fark yoktur. Ücretli sertifikalar daha çok kurumsal doğrulama, garanti veya destek gibi ek hizmetler sunar.