biotech Web Geliştirme

Let's Encrypt ile Ücretsiz SSL: Certbot + Nginx 2026 Rehberi

AK
Ali Kasımoğlu
03 Nis 2021 schedule 4 dk okuma
Let's Encrypt ile {p}Ücretsiz SSL{/p}: Certbot + Nginx 2026 Rehberi
analytics

Insight Density

groups Hedef Kitle: Deneyimli
65 Score

Teknik karmaşıklık ve içerik yoğunluğuna göre hesaplandı.

Son güncelleme: Nisan 2026 · AnomixLabs Teknik Ekibi

HTTPS artık seçenek değil, zorunluluk. Google 2018'den bu yana HTTP siteleri 'Güvenli Değil' olarak işaretliyor. Let's Encrypt ile bu ücretsiz ve otomatik.

1. Neden Let's Encrypt?

Let's Encrypt, 2016'da kurulan ve yılda 3 milyar üzerinde aktif sertifika veren ücretsiz, otomatik ve açık Sertifika Otoritesi'dir. Destekçiler: Mozilla, EFF, Cisco, Google. Alternatiflere (Comodo, DigiCert) kıyasla: ücretsiz, 90 günlük sertifika, tam otomasyon, DV (Domain Validation) sertifika.

SSL sertifikası — HTTPS güvenliği ve kilit simgesi

2. Nginx ve Certbot Kurulumu

# Ubuntu 22.04 / 24.04
$ sudo apt update
$ sudo apt install nginx
$ sudo systemctl enable nginx

# Certbot — snap paketi (önerilen, her OS için güncel)
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

# Certbot sürümünü doğrula
$ certbot --version
# certbot 2.x.x

3. Güvenlik Duvarı (UFW) Yapılandırması

Certbot sertifika almadan önce sunucunun 443 portunu dışarıya açması gerekir. Ubuntu'da varsayılan güvenlik duvarı UFW'dir:

# SSH erişimini güvence altına al — bunu ÖNCE yapın!
$ sudo ufw allow ssh

# UFW'yi etkinleştir
$ sudo ufw enable

# Nginx için HTTP (80) + HTTPS (443) profilini ekle
$ sudo ufw allow 'Nginx Full'

# Artık yalnız HTTP kuralına gerek yok
$ sudo ufw delete allow 'Nginx HTTP'

# Durumu doğrula
$ sudo ufw status

Beklenen çıktı:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)

Kritik uyarı: ufw enable komutunu çalıştırmadan önce mutlaka allow ssh yapın. Aksi takdirde mevcut SSH oturumunuz kesilir ve sunucuya erişemez hale gelirsiniz. Bunu bir kez yaşayan unutmaz.

4. SSL Sertifikası Alma: Nginx Plugin

# Tek komutla hem sertifika al hem Nginx konfigürasyonunu güncelle
$ sudo certbot --nginx -d orneksite.com -d www.orneksite.com

# Başarılı çıktı:
# Successfully received certificate.
# Certificate is saved at: /etc/letsencrypt/live/orneksite.com/fullchain.pem
# Key is saved at: /etc/letsencrypt/live/orneksite.com/privkey.pem
# This certificate expires on 2026-07-15

5. Nginx Konfigürasyonu (Certbot Sonrası)

server {
    listen 80;
    server_name orneksite.com www.orneksite.com;
    return 301 https://$host$request_uri;  # HTTP → HTTPS yönlendirme
}

server {
    listen 443 ssl http2;
    server_name orneksite.com www.orneksite.com;

    ssl_certificate /etc/letsencrypt/live/orneksite.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/orneksite.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;

    # HSTS
    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload' always;

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

6. Otomatik Yenileme

Let's Encrypt sertifikaları 90 gün geçerlidir. Certbot snap paketi, kurulumda otomatik timer kurar. Manuel doğrulama:

# Kalan süreyi kontrol et
$ sudo certbot certificates

# Yenileme simülasyonu (gerçekte yenilemez)
$ sudo certbot renew --dry-run

# Systemd timer'ı kontrol et
$ sudo systemctl status snap.certbot.renew.timer

# Manuel yenileme (gerekirse)
$ sudo certbot renew --force-renewal

7. Wildcard Sertifika (DNS Challenge)

*.orneksite.com gibi tüm alt domainleri kapsayan sertifika için DNS-01 challenge gerekir. Alan adı sağlayıcınızda TXT kaydı eklemenizi ister:

# Wildcard — tüm alt domainler için
$ sudo certbot certonly --manual \
    --preferred-challenges dns \
    -d orneksite.com \
    -d '*.orneksite.com'

# DNS TXT kaydı eklemenizi ister:
# _acme-challenge.orneksite.com → [verilen değer]

# Cloudflare kullananlar için otomatik:
$ pip install certbot-dns-cloudflare
$ certbot certonly --dns-cloudflare --dns-cloudflare-credentials creds.ini \
    -d orneksite.com -d '*.orneksite.com'

8. Cloudflare Flexible SSL Tehlikesi

Uyarı: Cloudflare'in 'Flexible SSL' modunu kullanmayın. Bu modda tarayıcı ile Cloudflare arası HTTPS, ama Cloudflare ile sunucunuz arası HTTP. Sunucunuz Let's Encrypt sertifikası olmadan SSL Labs A+ alamaz ve kullanıcı verisi son milde şifrelenmez. Her zaman 'Full (strict)' modunu kullanın.

9. Django settings.py HTTPS Güvenlik Ayarları

# Üretim ortamında (DEBUG=False)
SECURE_SSL_REDIRECT = True
SECURE_HSTS_SECONDS = 31536000  # 1 yıl
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
SECURE_REFERRER_POLICY = 'same-origin'
SECURE_CONTENT_TYPE_NOSNIFF = True
X_FRAME_OPTIONS = 'DENY'

10. Let's Encrypt Rate Limits

Dikkat: Let's Encrypt aynı domain için haftada 5 sertifika limiti uyguluyor. Test sırasında bu limite takılmamak için staging ortamı kullanın:

# Staging (test) ortamı — gerçek limit yok
$ sudo certbot --nginx --staging -d test.orneksite.com

# Staging sertifikası tarayıcı uyarısı verir ama fonksiyonel

11. SSL Labs A+ Skoru Doğrulama

ssllabs.com/ssltest/ adresinde domain'inizin SSL konfigürasyonunu test edin. A+ skoru için: TLS 1.2 ve 1.3 protokolleri, güçlü cipher suites, HSTS preload ve OCSP stapling gereklidir. Certbot'un varsayılan konfigürasyonu çoğu gereksinimi karşılar.

SSL Labs A+ kalite notu test sonucu

Özet

Let's Encrypt + Certbot + Nginx: ücretsiz, otomatik ve endüstri standardında SSL. Ubuntu 24.04'te snap ile 10 dakikada A+ skoru. Django'da SECURE_* ayarlarını ve Cloudflare Full Strict modunu tamamlayın.

Sıkça Sorulan Sorular

SSL sertifikası neden 90 günde bir yenileniyor? expand_more
Let's Encrypt bilinçli olarak kısa süreli sertifika kullanır. Bu, otomasyonu zorunlu kılar ve olası bir güvenlik ihlalinde sertifikanın kısa sürede geçersiz kalmasını sağlar. 90 gün, endüstri standardını daha kısa sürelere çekmek için kasıtlı bir strateji — sertifika yetkililerini otomasyona zorluyor. Certbot snap paketi bu süreci tamamen otomatize eder.
SECURE_SSL_REDIRECT = True Nginx arkasında sorun çıkarır mı? expand_more
Evet, Nginx arkasında SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') ayarı zorunludur. Aksi halde Django HTTPS isteğini HTTP görür ve sonsuz yönlendirme döngüsüne girer. Nginx konfigürasyonunda proxy_set_header X-Forwarded-Proto https; satırının olduğundan emin olun.
Wildcard sertifika ile normal sertifika arasındaki fark nedir? expand_more
Normal sertifika yalnızca belirtilen domain(ler)i kapsar: orneksite.com ve www.orneksite.com. Wildcard sertifika *.orneksite.com ile tüm alt domainleri (api, blog, app, staging...) tek sertifikayla kapsar. DNS-01 challenge gerektirir — HTTP-01 ile alınamaz. Certbot-dns-cloudflare gibi DNS plugin'lerle otomatik yenileme mümkündür.
Sertifika yenileme başarısız olursa ne olur? expand_more
Certbot, sona ermeden 30 gün önce yenilemeye başlar — bu sürede yenileme başarısız olursa tekrar dener. /var/log/letsencrypt/ loglarını izleyin. Yenileme başarısız olursa Certbot e-posta bildirimi gönderir (kayıt sırasında verilen adrese). DNS kaydı değişikliği, firewall veya 80/443 port erişim sorunu en yaygın başarısızlık nedenleridir.
Sertifika IP adresi için alınabilir mi? expand_more
Let's Encrypt IP adresleri için sertifika vermiyor — yalnızca domain adları için. IP-tabanlı SSL için self-signed sertifika veya ücretli sertifika otoritesi (DigiCert vb.) gereklidir. Geliştirme ortamı için mkcert aracı yerel CA oluşturarak tarayıcı uyarısı olmadan HTTP kullanmanızı sağlar.
OCSP Stapling nedir ve neden önemli? expand_more
OCSP (Online Certificate Status Protocol) Stapling, sunucunun sertifikanın iptal edilmediğini önceden doğrulayıp tarayıcıya sertifikayla birlikte sunmasıdır. Olmadan tarayıcı her bağlantıda OCSP sunucusuna istek atar — gecikme ekler ve gizlilik sorunu yaratır. ssl_stapling on; ile sunucu bu işi üstlenir, tarayıcı daha hızlı bağlanır. SSL Labs A+ için gereklidir.
Let's Encrypt'e alternatif ücretsiz SSL var mı? expand_more
Cloudflare Origin Certificates (Cloudflare'de DNS yönetiyorsanız), ZeroSSL (Let's Encrypt ile aynı ACME protokolü), BuyPass Go SSL (Norveçli CA, 180 gün geçerli). Cloudflare ücretsiz planı CDN'in önündeki SSL'i otomatik yönetir — ama sunucu ile Cloudflare arası Full Strict modda yine sertifika gereklidir.
Etiketler: #SSL #Let's Encrypt #Certbot #Nginx #HTTPS #Django #UFW #Wildcard #HTTP/2 #OCSP #HSTS
share

Bu Makaleyi Paylaş

Bilgiyi ağınızla paylaşarak bize destek olun.

AK

Ali Kasımoğlu

Full-stack Geliştirici & AnomixLabs Kurucusu

Python ve Django ekosisteminde uzmanlaşmış bir yazılım geliştirici. Modern web mimarileri, yapay zeka entegrasyonları ve minimalist kullanıcı deneyimleri üzerine odaklanıyor. AnomixLabs çatısı altında, karmaşık problemleri yalın ve etkili dijital çözümlere dönüştürmeyi hedefliyor.

psychology
psychology

Makale Hakkında Soru Sorun

AnomixAI · Makale içeriğine dayalı yanıtlar

5 soru hakkı
Yalnızca makale içeriği hakkında 0/500
forward_to_inbox

Geleceği Çözümleyin.

Enterprise yapay zeka, yazılım mimarisi ve dijital dönüşüm üzerine aylık brifingi alan 5.000+ mühendis ve kurucuya katılın. Spam yok.