
Let's Encrypt + Certbot ile SSL Kurulumu: HTTP-01 Pratik Rehber
Let's Encrypt sertifikasını VDS sunucunuza certbot ile nasıl kurarsınız? HTTP-01 challenge, --nginx/--apache plugin, --webroot, sertifika dosya yapısı, otomatik yenileme ve sık karşılaşılan hatalar.
Let's Encrypt + Certbot ile SSL Kurulumu: HTTP-01 Challenge ile Tek Domain Pratik Rehber
VDS aldınız, Nginx ya da Apache çalışıyor, port 80/443 açık. Sıra example.com ve www.example.com için Let's Encrypt sertifikasında. İyi haber: 5 dakikalık iş — certbot --nginx komutu sertifikayı alıp Nginx config'ini sizin için düzenliyor. Bu yazı pratik adımları anlatıyor: HTTP-01 challenge ile tek-domain (apex + www) sertifika alımı, dosya yapısı, otomatik yenileme, sık karşılaşılan hatalar.
Buyukweb perspektifi: cPanel hosting paketlerimizde AutoSSL standart — siteniz oluşturulduğu an Let's Encrypt sertifikası otomatik kuruluyor, 60. günde otomatik yenileniyor; siz bir şey yapmıyorsunuz. Bu rehber VDS müşterileri içindir. Buyukweb VDS Türkiye Tier 3 veri merkezimizde (Bursa Pendc) anında teslim ediliyor; root erişimi sizde, certbot dahil tam esneklik.
Wildcard sertifika (*.example.com) için bu yazı yetmez — DNS-01 challenge gerekiyor; o senaryo için Wildcard SSL DNS-01 Rehberi. ACME kavramsal altyapısı için Let's Encrypt Nedir?.
Ön Gereksinimler: Kurulumdan Önce Kontrol Listesi
Certbot'u çalıştırmadan önce şunlar tamam olmalı, yoksa "challenge failed" hatasıyla zaman kaybedersiniz:
1. DNS A kaydı sunucu IP'sine bakıyor mu?
dig +short example.com → VDS public IP'si dönmeli
dig +short www.example.com → Aynı IP
2. Port 80 ve 443 dışa açık, web sunucu listening mi?
ss -tlnp | grep -E ':(80|443)'
3. Firewall 80/tcp ve 443/tcp ALLOW mu?
ufw status (Ubuntu)
firewall-cmd --list-all (AlmaLinux)
4. curl http://example.com → HTTP 200/301/302 dönüyor mu?
"connection refused" olmamalı
5. /.well-known/acme-challenge/ yoluna engel kural yok mu?
IP block, basic auth, rate limit varsa challenge fail eder
dig boş dönerse DNS henüz yayılmamıştır; A kaydını ekledikten sonra TTL'e bağlı olarak 10 dakika ile birkaç saat beklemek gerekir.
Certbot Kurulumu
EFF, Let's Encrypt'in snap paketini öneriyor — her zaman güncel kalır. Ama APT/DNF paketleri de yıllarca sorunsuz çalışıyor; standart prodüksiyon için yeterli.
# Yöntem 1: APT (Ubuntu/Debian) — en pratik
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
# Apache: python3-certbot-apache
# Yöntem 2: DNF (AlmaLinux 9, Rocky Linux 9)
sudo dnf install epel-release -y
sudo dnf install certbot python3-certbot-nginx -y
# Yöntem 3: Snap (en güncel sürüm)
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
certbot --version # kurulum kontrol
Minimal sunucularda snapd ek yük; APT/DNF tercih edin. Bleeding edge gerekiyorsa snap.
En Hızlı Yol: certbot --nginx Tek Komut
Nginx zaten çalışıyorsa ve config'inizde server_name example.com www.example.com; satırı varsa, tek komutla hem sertifikayı alır hem Nginx config'ini günceller:
sudo certbot --nginx \
-d example.com -d www.example.com \
--email [email protected] \
--agree-tos \
--no-eff-email \
--redirect
Parametre açıklamaları:
--nginx— Nginx plugin'ini kullan (sertifika alır + config'i otomatik düzenler)-d example.com -d www.example.com— Sertifikaya dahil edilecek domain'ler (apex + www)--email [email protected]— Yenileme uyarıları ve önemli bildirimler için--agree-tos— Let's Encrypt ToS'u kabul ediyorsunuz (interaktif soruyu atlar)--no-eff-email— EFF haber bültenine kaydolmayı reddet--redirect— HTTP → HTTPS otomatik 301 redirect ekle (önerilen)
Komut başarılı tamamlandığında certbot şu çıktıyı verir:
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2026-08-07.
These names will be saved as a renewal configuration:
- example.com
- www.example.com
Successfully deployed certificate for example.com to /etc/nginx/sites-enabled/example.com
Successfully deployed certificate for www.example.com to /etc/nginx/sites-enabled/example.com
Congratulations! You have successfully enabled HTTPS on https://example.com and https://www.example.com
Tarayıcıda https://example.com artık yeşil kilit simgesiyle açılır.
Apache İçin Karşılığı: certbot --apache
Apache'da işlem aynı; sadece plugin adı değişir:
sudo certbot --apache \
-d example.com -d www.example.com \
--email [email protected] \
--agree-tos \
--no-eff-email \
--redirect
Plugin Apache'ın <VirtualHost> bloklarını düzenleyerek SSLEngine etkinleştirir, SSLCertificateFile ve SSLCertificateKeyFile yollarını ekler, RewriteRule ile HTTP → HTTPS redirect kurar.
Webroot Yöntemi: Config'e Dokunmadan
Plugin'in config'inize otomatik dokunmasını istemiyorsanız (Ansible ile config yönetiyorsanız idempotency önemli), --webroot sertifikayı alır ama config'i kendiniz yazarsınız.
sudo certbot certonly --webroot \
-w /var/www/html \
-d example.com -d www.example.com \
--email [email protected] --agree-tos --no-eff-email
-w /var/www/html document root'u gösteriyor; certbot /var/www/html/.well-known/acme-challenge/ altına geçici doğrulama dosyası bırakıyor; Let's Encrypt sunucusu HTTP üzerinden çekip doğruluyor. Birden fazla document root varsa her domain için ayrı -w belirtilebilir.
Standalone: Web Sunucu Yokken
Henüz Nginx/Apache kurulmadıysa certbot kendi başına 80 portunda dinleyebilir:
sudo systemctl stop nginx # port 80'i boşalt
sudo certbot certonly --standalone \
-d example.com -d www.example.com \
--email [email protected] --agree-tos --no-eff-email
sudo systemctl start nginx
Sürekli kullanım için uygun değil — production'da --webroot veya plugin tercih edilir. İlk kurulum, headless ortam veya konteyner senaryolarında işe yarar.
Sertifika Dosya Yapısı
Sertifikalar başarıyla alındıktan sonra:
/etc/letsencrypt/
├── live/example.com/ ← sembolik linkler — config'inizde bunları gösterin
│ ├── cert.pem → archive/cert1.pem
│ ├── chain.pem → archive/chain1.pem
│ ├── fullchain.pem → archive/fullchain1.pem (Nginx/Apache için)
│ └── privkey.pem → archive/privkey1.pem
├── archive/example.com/ ← gerçek versiyonlu dosyalar
└── renewal/example.com.conf ← yenileme yapılandırması
| Dosya | İçerik | Nginx/Apache için |
|---|---|---|
fullchain.pem |
cert + chain birleşik | ssl_certificate |
privkey.pem |
Private key | ssl_certificate_key |
chain.pem |
Ara CA zinciri | OCSP stapling ssl_trusted_certificate |
cert.pem |
Sadece domain sertifikası | Genelde tek başına kullanılmaz |
Önemli kural: Config'inizde her zaman live/ yollarını gösterin, archive/ değil. live/ sembolik link otomatik güncellenir; yenileme sonrası path değişmez.
Manuel Nginx Config: --webroot Sonrası
--webroot ile sertifika aldıysanız Nginx config'i kendiniz yazarsınız:
# /etc/nginx/sites-available/example.com
# HTTP → HTTPS redirect
server {
listen 80;
server_name example.com www.example.com;
# ACME challenge yolu — yenileme için açık kalmalı
location /.well-known/acme-challenge/ {
root /var/www/html;
}
location / {
return 301 https://$host$request_uri;
}
}
# HTTPS — apex + www
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
resolver 1.1.1.1 8.8.8.8 valid=300s;
# HSTS — 6 ay
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;
root /var/www/example.com;
index index.html index.php;
# ... uygulama bloğunuz
}
Test edip yükleyin: sudo nginx -t && sudo systemctl reload nginx. Cipher listesi ve protokol seçimi için Mozilla'nın SSL Configuration Generator'ı (old/intermediate/modern profil bazlı hazır config) pratik referans.
Otomatik Yenileme: 90 Gün Sorunu
Let's Encrypt 90 gün geçerli; certbot 30 gün kala otomatik yeniliyor. Snap veya APT ile certbot kurulduğunda certbot.timer zaten kurulu, günde iki kez kontrol ediyor.
# Timer durumu (modern dağıtımlar)
sudo systemctl status certbot.timer
sudo systemctl enable --now certbot.timer
# Eski sistemlerde cron alternatifi
sudo crontab -e
# 0 3 * * * certbot renew --quiet --deploy-hook "systemctl reload nginx"
# Yenilemeyi test et — staging endpoint, rate limit harcamaz
sudo certbot renew --dry-run
--deploy-hook parametresi sertifika yenilendiğinde Nginx'i reload eder; yenileme olmadıysa hook çalışmıyor — gereksiz reload yok. Apache için systemctl reload apache2 (Debian) veya httpd (RHEL).
--dry-run çıktısında "Congratulations, all simulated renewals succeeded" görmelisiniz. Hata varsa burada görünür; production yenileme zamanına kadar sürpriz çıkmaz.
Sık Karşılaşılan Hatalar
Could not bind to IPv4 or IPv6
--standalone modu çalıştırıldı ama port 80 zaten Nginx/Apache tarafından kullanılıyor. Çözüm: --standalone yerine --webroot veya plugin (--nginx/--apache) kullanın.
Connection refused veya Timeout
Firewall port 80'i kapatmış, web sunucu çalışmıyor, ya da cloud provider'da network security group izin vermiyor.
# UFW (Ubuntu)
sudo ufw allow 80/tcp && sudo ufw allow 443/tcp
# firewalld (AlmaLinux)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo systemctl status nginx # web sunucu kontrol
Cloud provider tarafında security group veya VPC firewall kuralları da kontrol edilmeli.
DNS problem: NXDOMAIN
Domain için A kaydı yok ya da DNS yayılımı tamamlanmadı. dig +short example.com boş dönerse panel üzerinden A kaydını ekleyin, TTL kadar bekleyin.
too many certificates already issued
Let's Encrypt rate limit: aynı registered domain için haftada 50 sertifika; aynı SAN seti için haftada 5 duplicate; başarısız doğrulama için saatte 5 hatalı deneme. Test/geliştirme yapıyorsanız --staging endpoint kullanın:
sudo certbot --nginx --staging -d example.com
Production rate limit'e takıldıysanız 1 saat (hatalı doğrulama) veya 1 hafta (sertifika sayısı) beklemek gerekir.
/.well-known/acme-challenge/ 404 Not Found
Web sunucu config'inde bu yola özel block, rewrite veya WordPress .htaccess kuralı varsa challenge dosyasına erişim engellenir.
# Nginx — ana config'e ekleyin
location /.well-known/acme-challenge/ {
root /var/www/html;
try_files $uri =404;
}
# Apache .htaccess
RewriteEngine On
RewriteRule ^.well-known/acme-challenge/ - [L]
Cloudflare Arkasında: İki Senaryo
Cloudflare proxy kapalı (Gri Bulut, DNS-only): Trafik direkt VDS'e geliyor; Let's Encrypt HTTP-01 sorunsuz çalışır.
Cloudflare proxy açık (Turuncu Bulut): Trafik Cloudflare üzerinden geçiyor; ziyaretçi Cloudflare Universal SSL'i görüyor. Origin'de Let's Encrypt sertifikası Cloudflare-to-origin bağlantısı için kullanılıyor (Cloudflare SSL modunu "Full (strict)" yapmanız önerilir).
Cloudflare proxy aktif kullanıyorsanız Cloudflare Origin Certificate alternatif — 15 yıl geçerli, origin'de Let's Encrypt yenileme yükü olmuyor; tarayıcı görmüyor, sadece Cloudflare. Sürekli proxy kullanımı için daha az operasyonel yük.
ZeroSSL ve Caddy: Alternatif Yollar
ZeroSSL Let's Encrypt rate limit'ine takıldığınızda yedek bir ücretsiz ACME CA. Aynı certbot ile çalışıyor, sadece server URL değişiyor: --server https://acme.zerossl.com/v2/DV90. ZeroSSL EAB (External Account Binding) gerektirebiliyor; --eab-kid ve --eab-hmac-key parametreleri ZeroSSL panel'inden alınır.
Caddy web sunucusu Let's Encrypt'i native destekliyor — config'inizde example.com { ... } yazmanız yeterli, Caddy başlatıldığı an sertifika alır ve otomatik yeniler. Nginx'in olgun ekosistemiyle kıyaslandığında daha az yaygın ama yeni kurulumlar için pratik. Traefik (Docker/Kubernetes) de aynı şekilde Let's Encrypt'i native destekliyor.
Buyukweb Tarafı: cPanel vs VDS
cPanel Web Hosting müşterileri: AutoSSL Let's Encrypt'i HTTP-01 challenge ile otomatik kuruyor — bu yazıyı okumanıza gerek yok. Yeni domain eklediğinizde 24-48 saat içinde otomatik sertifika alıyor; cPanel arayüzünde SSL/TLS → SSL/TLS Status menüsünden manuel de tetiklenebiliyor. Plesk Web Hosting paketlerinde de Let's Encrypt eklentisi tek tıkla aktif.
VDS Sunucu müşterileri: Bu yazı tam size yönelik — Ubuntu, Debian, AlmaLinux veya Rocky Linux fark etmez, certbot adımları benzer. Buyukweb VDS Türkiye Tier 3 veri merkezimizde (Bursa Pendc) anında teslim ediliyor; root erişimi sizde, certbot dahil tam esneklik. Birden fazla domain (3-5 SAN) varsa hepsini -d bayraklarıyla aynı sertifikaya dahil edebilirsiniz.
Sıkça Sorulan Sorular
Buyukweb cPanel AutoSSL ile bu yazıdaki certbot kurulumunun farkı nedir?
cPanel AutoSSL panel tarafından yönetilen Let's Encrypt entegrasyonu — sertifika otomatik kuruluyor ve yenileniyor. Bu yazıdaki certbot kurulumu ise VDS'de elle yapılan iş; tam kontrol sizde, root erişiminiz var, plugin yerine --webroot veya --standalone alternatiflerini seçebilirsiniz. AutoSSL altta zaten Let's Encrypt kullanıyor; aralarındaki fark "kim yönetiyor".
Tek-domain mi wildcard mı tercih etmeliyim?
3-5 sabit subdomain'iniz varsa (www, blog, api) tek-domain SAN sertifika daha pratik — -d bayraklarıyla hepsini aynı sertifikaya dahil edersiniz, HTTP-01 yeterli. Wildcard (*.example.com) gerçekten anlamlı olduğu yer dinamik subdomain üreten SaaS uygulamaları veya 10+ subdomain ekosistemleri. Wildcard DNS-01 zorunlu kıldığından kurulum karmaşıklığı artıyor — gerçekten gerekli olduğunda alın.
Snap mi APT mi certbot için?
İkisi de çalışıyor. Snap her zaman güncel; APT/DNF paketleri dağıtım deposundaki sürümle. Standart prodüksiyonda APT/DNF yeterli — yıllarca sorunsuz çalışıyor. Bleeding edge istiyorsanız snap. Minimal sunucularda snapd dependency yer kapladığından APT/DNF tercih edilir.
Renewal hook nedir, ne zaman gerekir?
--deploy-hook "komut" parametresi sertifika yenilendiğinde çalışacak komutu belirtir. En yaygın kullanım web sunucu reload — sertifika dosyaları değiştiğinde Nginx/Apache'ın yeni sertifikayı bellekten yüklemesi için. Yenileme olmadıysa hook çalışmaz; gereksiz reload yapmıyor.
Cloudflare proxy açıkken Let's Encrypt nasıl alırım?
Proxy açıkken HTTP-01 challenge Cloudflare'e gelip orada SSL sonlandırılıyor. Pratik çözümler: (1) Sertifika alma sırasında Cloudflare proxy'yi geçici "DNS-only" yap, sertifikayı al, sonra proxy'yi tekrar aç. (2) Kalıcı: DNS-01 challenge'a geç (acme.sh + Cloudflare DNS API). (3) Cloudflare Origin Certificate'a geç — 15 yıl geçerli, Let's Encrypt yenileme derdi olmuyor.
Sertifika yenilemesi başarısız oldu, ne yapmalıyım?
Önce log: /var/log/letsencrypt/letsencrypt.log. Sık nedenler: A kaydı doğru IP'yi göstermiyor, port 80 kapalı, web sunucu çalışmıyor, /.well-known/acme-challenge/ engelleyen rewrite kuralı eklenmiş. certbot renew --dry-run ile manuel test edip hatayı inceleyin. Düzeltince certbot renew --force-renewal ile zorla yeniden deneyin (rate limit'e dikkat).
Let's Encrypt neden 90 gün, daha uzun olamaz mı?
Politika gereği maksimum 90 gün; kısa ömür otomasyonu zorunlu kılarak güvenliği artırıyor — ele geçirilmiş bir private key maksimum 90 gün zararlı olabilir. Otomatik yenileme certbot timer/cron ile arka planda çalışıyor; bir kez kurulunca elden geçirme gerekmiyor. Daha uzun geçerlilik için ücretli CA gerekiyor ama otomasyon avantajı kayboluyor.
Sonuç
Let's Encrypt + certbot ile tek-domain SSL kurulumu öğleden sonra başlayıp 5 dakikada bitiren bir iş — özellikle certbot --nginx veya certbot --apache plugin'iyle. HTTP-01 challenge port 80 üzerinden domain sahipliğini doğruluyor, sertifika 90 gün geçerli, certbot timer 30 gün kala otomatik yeniliyor. Sertifika dosyaları /etc/letsencrypt/live/example.com/ altında; Nginx/Apache config'inizde her zaman live/ yollarını gösterin.
Sık karşılaşılan hatalar firewall, DNS yayılımı eksikliği veya /.well-known/acme-challenge/ yoluna erişim engelleyen rewrite kuralları. certbot renew --dry-run her ay bir kez çalıştırın — yenileme zamanına kadar sürpriz çıkmaz.
Buyukweb cPanel hosting'de AutoSSL bu işi sizin için zaten yapıyor; VDS müşterileriyseniz bu yazı tam yol haritası. Wildcard sertifika için DNS-01 challenge ile wildcard SSL yazısına bakabilirsiniz; ACME protokolünün ayrıntılı kavramsal anlatımı için Let's Encrypt Nedir? yazısı temel kaynak. Teknik destek için 0850 302 60 70 numaralı hat 7/24 açık.
İlgili Buyukweb Hizmetleri
Let's Encrypt sertifikası ve sunucu güvenliği için Türkiye Tier 3 veri merkezimizdeki paketler:
- VDS Sunucu (E5-V4) — root erişim, certbot tam kontrol, anında teslim
- cPanel Web Hosting (AutoSSL Let's Encrypt standart)
- WordPress Hosting — AutoSSL + LiteSpeed cache
- Plesk Web Hosting — Let's Encrypt eklentisi tek tıkla aktif
- Wildcard SSL Rehberi — DNS-01 challenge, certbot ve acme.sh
- Let's Encrypt Kavramsal Rehber — ACME, DV/OV/EV, 90 gün politikası
Sertifika kurulumu veya yenileme sorunlarında 0850 302 60 70 numaralı destek hattımıza veya iletişim sayfamıza yazabilirsiniz.
Güvenlik & SSL İlgili Hizmetlerimiz
Bu yazıda anlatılan teknik konuyu profesyonel altyapıyla deneyimleyin
Etiketler:

