cPanel yıllıkta ücretsiz taşıma + SSLHemen İncele
Buyukweb
Let's Encrypt + Certbot ile SSL Kurulumu: HTTP-01 Pratik Rehber

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.

Büyükweb Editör EkibiHosting, Sunucu ve Sistem Yönetimi Editörü12 dakika okuma

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.

Büyükweb 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. Büyükweb VDS Türkiye Tier III sertifikalı DataCasa veri merkezimizde (İstanbul) 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 admin@example.com \
  --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 admin@example.com — 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 admin@example.com \
  --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 admin@example.com --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 admin@example.com --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.

Büyükweb 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. Büyükweb VDS Türkiye Tier III sertifikalı DataCasa veri merkezimizde (İstanbul) 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

Büyükweb 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.

Büyükweb 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ı satış öncesi destek numaramızı arayabilirsiniz.


İlgili Büyükweb Hizmetleri

Let's Encrypt sertifikası ve sunucu güvenliği için Türkiye Tier III sertifikalı DataCasa veri merkezimizdeki paketler:

Sertifika kurulumu veya yenileme sorunlarında 0850 302 60 70 numaralı satış öncesi destek numaramıza ulaşabilir veya iletişim sayfamıza yazabilirsiniz.

Güvenlik & SSL İlgili Hizmetlerimiz

Bu yazıda anlatılan teknik konuyu profesyonel altyapıyla deneyimleyin

Etiketler:

#ssl#certbot#let's encrypt#kurulum rehberi#ssl sertifikası#güvenlik

Bu yazıyı paylaş

WhatsApp0850 302 60 70