SSL/TLS sertifikası, web sitenizle ziyaretçi tarayıcısı arasındaki trafiği şifreleyen, kimlik doğrulama sağlayan ve modern web'in olmazsa olmaz bileşenidir. Google Chrome 2018'den bu yana HTTPS olmayan siteleri Not Secure olarak işaretler; Search Console sıralama sinyali olarak HTTPS'i kullanır; PCI-DSS gibi standartlar ödeme alan sitelerde TLS 1.2+ zorunluluğu getirir. Bu rehber, SSL sertifikasının ne olduğundan başlayarak; hangi tip sertifikayı seçmeniz gerektiğini, nereden ücretsiz veya ücretli olarak temin edebileceğinizi, Nginx/Apache/cPanel/Plesk üzerinde nasıl kuracağınızı, otomatik yenileme ve güvenlik sertleştirme adımlarını üretim ortamı pratikleriyle anlatır.

SSL ve TLS Nedir? Hızlı Bir Özet

İlgili rehberler: OWASP Top 10 2026 · JWT güvenlik · SQL injection önleme · Parola hash (BCrypt, Argon2) · DDoS koruma

SSL (Secure Sockets Layer), Netscape tarafından 1995'te tasarlanan, günümüzde tamamen TLS (Transport Layer Security) ile değiştirilmiş tarihi bir protokoldür. Endüstri hâlâ alışkanlıkla "SSL sertifikası" der ama gerçekte aldığınız şey bir X.509 TLS sertifikasıdır (RFC 5280). TLS 1.0 ve 1.1, IETF tarafından 2021'de resmen kullanım dışına alındı; bugün desteklenmesi gereken sürümler TLS 1.2 ve TLS 1.3'tür.

TLS 1.3 (RFC 8446) önceki sürümlere göre üç önemli değişiklik getirir: zayıf cipher suite'lerin (RC4, 3DES, CBC mod) kaldırılması, 1-RTT handshake (TLS 1.2'nin 2-RTT'sine karşı yarı yarıya gecikme), ve 0-RTT (resumption ile sıfır gecikme — replay riskine karşı dikkatli kullanılmalı). Modern uygulamalarda TLS 1.3'ü mutlaka aktif edin; geriye dönük uyumluluk için TLS 1.2'yi de bırakın.

Sertifika Zinciri ve Açık Anahtar Kriptografisi

Bir TLS sertifikası tek başına çalışmaz; kök (root) → ara (intermediate) → uç (leaf) şeklinde bir chain of trust kurar. Tarayıcılar yalnızca işletim sistemine veya kendi trust store'larına gömülü kök sertifikalara güvenir (Mozilla CA Programı, Microsoft Trusted Root, Apple Trust Store, Chrome Root Store). Sunucunuz fullchain.pem adıyla leaf + intermediate'i birleştirip sunmalıdır; aksi hâlde Android cihazlarda "NET::ERR_CERT_AUTHORITY_INVALID" hatası alırsınız.

Sertifika almak için elinizde bir özel anahtar (private key) ve buna karşılık üretilen bir CSR (Certificate Signing Request) bulunması gerekir. Özel anahtar sunucuda kalır, paylaşılmaz; CSR ise CA'ya gönderilen, açık anahtarınızı ve domain bilgilerini içeren imzalı bir taleptir. CA bu talebi imzalar ve size sertifikayı geri gönderir. Sertifika otoritelerinin uyması gereken kurallar CA/Browser Forum Baseline Requirements'da tanımlıdır.

Sertifika Tipleri: DV, OV, EV, Wildcard ve SAN

DV (Domain Validation): En hızlı ve en yaygın türdür. CA yalnızca alan adının kontrolünü doğrular (HTTP-01, DNS-01 veya TLS-ALPN-01 challenge ile). Onay süresi dakikalarla ölçülür, ücretsiz seçenekleri vardır (Let's Encrypt, ZeroSSL, Buypass), blog/SaaS/kurumsal sunum siteleri için tamamen yeterlidir.

OV (Organization Validation): CA, alan adı kontrolüne ek olarak şirket adı, adres ve telefon numarasını doğrular (D&B, ticaret sicil kayıtları). Sertifikanın Subject alanında şirket bilgisi yer alır; tarayıcı detaylarında görüntülenir. Süreç 1-3 iş günü sürer, fiyat 50-150 USD/yıl bandındadır. B2B SaaS, fintech ve kurumsal müşterilerle çalışan firmalar için iyi bir orta yol.

EV (Extended Validation): En sıkı doğrulama. Şirketin yasal varlığı, fiziki adresi, telefon görüşmesi ve yetkili imza onayı gerektirir. Eskiden tarayıcının URL çubuğunda yeşil şirket adı çubuğu gösterirdi; Chrome 77 (2019) ve Firefox 70 bu görsel sinyali kaldırdı. Bugün EV'nin pratik faydası kalmadı denebilir, fakat banka, hava yolu ve halka açık şirketler hâlâ tedarikçi politikası gereği tercih ediyor.

Wildcard (*.example.com): Tek sertifikayla tüm birinci seviye alt alanları kapsar (api.example.com, blog.example.com, mail.example.com). Çok seviyeli alt alanlar (a.b.example.com) kapsam dışındadır. Let's Encrypt wildcard verir ancak DNS-01 challenge zorunludur — HTTP-01 wildcard için çalışmaz.

Multi-Domain / SAN (Subject Alternative Names): Tek sertifika içinde 100'e kadar farklı domain barındırır. Aynı altyapıda birden çok marka sunan ajanslar için idealdir; kurulum ve yenileme maliyetini düşürür.

Ücretsiz mi Ücretli mi? Pratik Karar Matrisi

Site trafiğinin %95'i için Let's Encrypt yeterlidir. Let's Encrypt; Internet Security Research Group (ISRG) tarafından işletilen, otomatik yenileme için ACME protokolü üzerine kurulu, kâr amacı gütmeyen bir CA'dır. 90 gün geçerli sertifika verir; certbot, acme.sh ve panel entegrasyonları otomatik yenileme yapar. Buypass Go SSL 180 günlük alternatif sunar; ZeroSSL daha kullanıcı dostu GUI ve REST API ile öne çıkar. Üçü de tarayıcılar tarafından %100 kabul görür.

Ücretli sertifikayı tercih etmeniz gereken net senaryolar şunlardır:

  • OV/EV güven sinyali: Bankacılık, ödeme, sağlık, kurumsal portal — sözleşme veya regülasyon zorunluluğu
  • Garanti (warranty): Sectigo 10K-2M USD, DigiCert 1.75M USD'ye kadar — CA hatası nedeniyle finansal kayıp olursa sigorta
  • 24/7 telefon desteği: Bağımsız CA'ların kurumsal hesaplarında
  • Eski cihaz/IoT uyumluluğu: Java 7, eski Android, ödeme terminalleri için kök sertifika havuzu farklı olabilir
  • Code-signing veya S/MIME: Let's Encrypt sadece TLS verir; kod imzalama veya e-posta imzalama için ücretli CA gerekir

Ücretli Sertifika: Nereden Almalı?

Sectigo (eski adıyla Comodo CA), dünya çapında en geniş pazar payına sahip ticari CA'lardandır; bütçe dostu fiyatları ve geniş bayi ağıyla öne çıkar. DigiCert kurumsal segmentin lideri, yüksek warranty ve hızlı OV/EV onayıyla tanınır; Symantec, GeoTrust, Thawte ve RapidSSL markalarını 2017'de bünyesine kattı. GlobalSign Avrupa pazarında güçlüdür ve eIDAS uyumlu nitelikli sertifikalar sunar.

Bayi (reseller) yoluyla aynı sertifikaları çok daha ucuza bulmak mümkündür: Namecheap, SSLs.com, GoGetSSL, The SSL Store klasik tercihlerdir. Türkiye'de yerel destek isteyenler için KEYDAL hosting paketleri ücretsiz Let's Encrypt entegrasyonu, kurumsal ihtiyaçlar için ücretli OV/EV temini ve kurulum desteği sunar; detaylar /hizmetler sayfasında.

Let's Encrypt + Certbot: En Hızlı Yol

Ubuntu/Debian üzerinde Nginx ile çalışan bir sunucuda HTTPS'e geçmenin en kısa yolu Certbot'tur. Certbot (EFF), sunucu yapılandırma dosyalarını otomatik düzenler; sertifikayı alır ve cron/systemd timer ile yenilemeyi bağlar.

# Ubuntu/Debian — Certbot kurulumu ve Nginx ile sertifika alma
sudo apt update
sudo apt install -y certbot python3-certbot-nginx

# Tek komutla domain ekleme + Nginx config güncelleme + sertifika
sudo certbot --nginx \
    -d example.com -d www.example.com \
    --email admin@example.com --agree-tos --no-eff-email --redirect

# Yenileme testi (gerçek istek atmaz)
sudo certbot renew --dry-run

# Sertifikaların durumunu listele
sudo certbot certificates

Certbot kurulumu sonrası systemd timer'ı (systemctl list-timers | grep certbot) varsayılan olarak günde iki kez yenileme dener; sertifikanın bitimine 30 günden az kalmışsa yenileme yapar. Apache kullanıyorsanız python3-certbot-apache paketini kurup --apache bayrağını kullanın.

acme.sh: Root Olmadan ve Hafif

acme.sh, saf shell script ile yazılmış, Python bağımlılığı olmayan, root yetkisi gerektirmeyen ACME istemcisidir. Paylaşımlı hosting, BSD sistemler ve container imajlarında Certbot'a göre çok daha pratiktir. DNS sağlayıcıları için 150+ entegre eklenti içerir (Cloudflare, Route 53, GoDaddy, NameCheap).

# acme.sh kurulumu (root değil, normal kullanıcı)
curl https://get.acme.sh | sh -s email=admin@example.com
source ~/.bashrc

# HTTP-01 (webroot) ile sertifika alma
acme.sh --issue -d example.com -d www.example.com \
    --webroot /var/www/html

# Sertifikayı sistem yoluna kur ve nginx reload
acme.sh --install-cert -d example.com \
    --fullchain-file /etc/ssl/example.com/fullchain.pem \
    --key-file       /etc/ssl/example.com/key.pem \
    --reloadcmd      "systemctl reload nginx"

# Wildcard için DNS-01 (Cloudflare örneği)
export CF_Token="..."
export CF_Account_ID="..."
acme.sh --issue --dns dns_cf -d example.com -d '*.example.com'

acme.sh kurulum sırasında otomatik olarak günlük cron eklediği için ayrıca yenileme planlamanıza gerek yoktur. Varsayılan CA olarak ZeroSSL kullanır; Let's Encrypt'e geçmek için acme.sh --set-default-ca --server letsencrypt komutunu çalıştırın.

Panel Üzerinden Kurulum: cPanel, Plesk, DirectAdmin, CyberPanel

cPanel AutoSSL: WHM > SSL/TLS > Manage AutoSSL menüsünden Sectigo veya Let's Encrypt sağlayıcısı seçilir; tüm hosting hesapları için sertifika otomatik alınır ve yenilenir. WHM > Manage Account > Manage AutoSSL altından hesap bazında istisna eklenebilir.

Plesk: Domain detay sayfasında SSL/TLS Certificates > Install a free basic certificate provided by Let's Encrypt kutusu tek tıkla sertifika alır. Mail subdomain'leri (mail.domain.com), webmail ve www için de işaretlemek önerilir. Plesk Onyx ve sonrası DNS-01 challenge'ı destekler, böylece wildcard alabilirsiniz.

DirectAdmin: User Level > SSL Certificates > "Free & automatic certificate from Let's Encrypt" seçilir, Document Root içindeki .well-known klasörü otomatik açılır. Hosting paketi yöneticisi letsencrypt=ON seçeneğini admin panelden açmalıdır.

CyberPanel + LiteSpeed: SSL menüsü altında "Issue SSL" seçilir; tek tık ile alınır, otomatik yenilenir. Container ortamlarında Caddy (otomatik TLS dahili) veya Traefik (Let's Encrypt resolver konfigürasyonu) tercih edilir.

# Traefik v2 — Let's Encrypt otomatik TLS (docker-compose.yml)
services:
  traefik:
    image: traefik:v2.11
    command:
      - --providers.docker=true
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
      - --certificatesresolvers.le.acme.email=admin@example.com
      - --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
      - --certificatesresolvers.le.acme.tlschallenge=true
      - --entrypoints.web.http.redirections.entrypoint.to=websecure
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./letsencrypt:/letsencrypt
      - /var/run/docker.sock:/var/run/docker.sock:ro
  app:
    image: nginx:alpine
    labels:
      - traefik.enable=true
      - traefik.http.routers.app.rule=Host(`example.com`)
      - traefik.http.routers.app.entrypoints=websecure
      - traefik.http.routers.app.tls.certresolver=le

Manuel CSR Üretimi (Ücretli Sertifikalar İçin)

Ticari CA'dan sertifika alıyorsanız OpenSSL ile bir CSR üretmeniz istenir. RSA 2048-bit endüstri standardıdır; ECDSA P-256 daha küçük ve hızlıdır, modern tarayıcıların tamamı destekler. Eski Android 4.x ve Windows XP cihazlar için RSA tercih edin.

# RSA 2048-bit özel anahtar + CSR (subject inline)
openssl req -newkey rsa:2048 -nodes \
    -keyout /etc/ssl/private/example.com.key \
    -out    /etc/ssl/certs/example.com.csr \
    -subj "/C=TR/ST=Istanbul/L=Istanbul/O=KEYDAL/OU=IT/CN=example.com"

# ECDSA P-256 (daha hızlı, daha küçük)
openssl ecparam -genkey -name prime256v1 -out example.com.key
openssl req -new -key example.com.key -out example.com.csr \
    -subj "/C=TR/ST=Istanbul/O=KEYDAL/CN=example.com"

# CSR içeriğini doğrula (CA'ya göndermeden önce)
openssl req -in example.com.csr -noout -text | grep -E 'Subject:|DNS:'

# SAN içeren CSR için config dosyası kullanın
cat > csr.cnf <<'EOF'
[req]
distinguished_name = req
req_extensions = v3_req
prompt = no
[req]
C = TR
O = KEYDAL
CN = example.com
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = example.com
DNS.2 = www.example.com
DNS.3 = api.example.com
EOF
openssl req -new -key example.com.key -out example.com.csr -config csr.cnf

CA size sertifikayı çoğunlukla iki dosya hâlinde yollar: example.com.crt (leaf) ve intermediate.crt. Sunucuya sunmadan önce cat example.com.crt intermediate.crt > fullchain.pem komutuyla birleştirin. Eksik intermediate, Android cihazlarda ve eski Java istemcilerinde hata verir; https://www.ssllabs.com/ssltest/ raporu "Chain issues: Incomplete" uyarısı gösterir.

Modern Nginx TLS Yapılandırması (Mozilla Intermediate)

Aşağıdaki konfigürasyon Mozilla SSL Configuration Generator'ın "Intermediate" profiline dayanır; %95+ tarayıcı uyumluluğu sağlar ve SSL Labs'ta A+ alır. Sadece güncel sistem desteklemeniz gerekiyorsa "Modern" profilinde TLS 1.3-only de seçebilirsiniz.

server {
    listen 443 ssl http2;
    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_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

    # Mozilla Intermediate — TLS 1.2 + 1.3
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # Session — performans için
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    # OCSP stapling — istemci CA OCSP'sine bağlanmasın
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 1.1.1.1 8.8.8.8 valid=300s;
    resolver_timeout 5s;

    # HSTS — preload uyumlu (1 yıl iyidir, önce test edin)
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

Apache 2.4 SSL VirtualHost

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com

    SSLEngine on
    SSLCertificateFile      /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile   /etc/letsencrypt/live/example.com/privkey.pem

    SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
    SSLHonorCipherOrder     off
    SSLSessionTickets       off

    SSLUseStapling          on
    SSLStaplingCache        "shmcb:logs/ssl_stapling(32768)"

    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
</VirtualHost>
</IfModule>

<VirtualHost *:80>
    ServerName example.com
    Redirect permanent / https://example.com/
</VirtualHost>

CAA DNS Kaydı: Hangi CA'nın Sertifika Verebileceğini Kısıtlayın

CAA (Certification Authority Authorization) kaydı, alan adınız için yalnızca belirli CA'ların sertifika düzenleyebilmesini sağlar. Bir saldırgan bağımsız bir CA'dan domain'iniz için sertifika talep ederse, CAA kaydı sayesinde CA bu talebi reddetmek zorundadır. CA/Browser Forum 2017'den bu yana CAA kontrolünü zorunlu kılar.

; example.com için CAA — sadece Let's Encrypt sertifika verebilir
example.com.    IN  CAA  0 issue "letsencrypt.org"
example.com.    IN  CAA  0 issuewild "letsencrypt.org"
example.com.    IN  CAA  0 iodef "mailto:security@example.com"

; Birden fazla CA'ya izin
example.com.    IN  CAA  0 issue "sectigo.com"
example.com.    IN  CAA  0 issue "digicert.com"

Doğrulama: dig example.com CAA +short. Cloudflare, Route 53, AWS Route53 ve Hetzner DNS panelleri CAA kaydını destekler. Eski TR domain provider'ları desteklemiyorsa, DNS'i Cloudflare gibi ücretsiz bir provider'a taşıyın.

HSTS ve HSTS Preload

HSTS (HTTP Strict Transport Security) tarayıcıya "bu domain'i gelecek N saniye boyunca yalnızca HTTPS üzerinden ziyaret et" der. SSL stripping saldırılarına ve Wi-Fi MITM ataklarına karşı kritik bir savunmadır. Header dokümantasyonu: MDN HSTS.

# Test aşamasında — kısa süre
Strict-Transport-Security: max-age=300

# Production — 1 yıl
Strict-Transport-Security: max-age=31536000

# Subdomain'leri de zorla
Strict-Transport-Security: max-age=31536000; includeSubDomains

# Preload list'e başvuru için minimum gereksinimler
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

hstspreload.org üzerinden başvurarak alan adınızı tarayıcıların gömülü HSTS listesine ekletebilirsiniz; bu listede olan domain'ler ilk ziyarette bile HTTPS'e zorlanır. Dikkat: preload listesinden çıkmak haftalar sürer; tüm subdomain'lerin HTTPS hazır olduğundan emin olun.

OCSP Stapling: Revocation Kontrolü Sunucudan

OCSP (Online Certificate Status Protocol), bir sertifikanın iptal edilip edilmediğini kontrol eder. Klasik akışta tarayıcı her sayfa yüklemesinde CA'nın OCSP responder'ına bağlanır — bu hem yavaş hem gizlilik sızıntısıdır (CA hangi siteyi ziyaret ettiğinizi öğrenir). OCSP Stapling ile sunucu OCSP yanıtını periyodik olarak alıp TLS handshake'inde istemciye sunar; istemci CA'ya hiç bağlanmaz.

Nginx'te ssl_stapling on; ssl_stapling_verify on; direktifleri yeterlidir (yukarıdaki konfigürasyonda mevcut). Doğrulama: openssl s_client -connect example.com:443 -status çıktısında OCSP Response Status: successful görünmelidir.

Certificate Transparency: Sertifika Sızıntısını İzleyin

Certificate Transparency (CT), CA'ların düzenlediği her sertifikayı kamuya açık bir log sistemine yazma zorunluluğudur. Chrome ve Safari, CT'ye işlenmemiş sertifikaları kabul etmez. Bu, alan adınız için yetkisiz düzenlenmiş sertifikaları erkenden tespit etmenizi sağlar.

crt.sh üzerinde alan adınızı arayarak tüm geçmiş sertifikaları görebilirsiniz. Facebook CT Monitoring veya Cert Spotter gibi servislere e-posta uyarısı kurun: yeni bir sertifika düzenlendiğinde haberdar olursunuz, beklenmedik bir kayıt güvenlik olayını işaret edebilir.

Test ve Skor: SSL Labs A+ Hedefi

Yapılandırmanızı doğrulamak için endüstri standardı araç Qualys SSL Labs SSL Test'tir. A+ almak için: TLS 1.3 desteği, HSTS preload, eksiksiz zincir, güçlü cipher seçimi ve OCSP stapling gerekir. Komut satırından hızlı kontrol için aşağıdaki komutları kullanın.

# Sertifika ve zincir bilgileri
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates

# TLS 1.3 desteğini doğrula
openssl s_client -connect example.com:443 -tls1_3 </dev/null 2>&1 | grep 'Protocol\|Cipher'

# Zincirin tam olduğunu kontrol
echo | openssl s_client -connect example.com:443 -showcerts 2>/dev/null | grep -c 'BEGIN CERTIFICATE'

# Hızlı curl testi
curl -vI https://example.com 2>&1 | grep -E 'SSL connection|subject|issuer|HTTP/'

# Kapsamlı test — testssl.sh
docker run --rm -ti drwetter/testssl.sh https://example.com

testssl.sh açık kaynaklıdır, internete kapalı sunucuları da test edebilir; kurumsal ortamlarda CI pipeline'a koyup her deploy sonrası TLS regresyon testi çalıştırılır. Mozilla'nın Observatory'si HTTP başlıkları, TLS ve içerik güvenliğini bütünleşik puanlar.

Otomatik Yenileme: Sertifika Süresi Bitmesin

Sertifika süresinin dolması, modern web altyapısında en sık karşılaşılan downtime sebeplerinden biridir. Microsoft Teams 2022, LinkedIn 2017, Cisco WebEx 2020 ve Pagerduty 2018 örnekleri "unutulmuş sertifika yenileme" yüzünden saatlerce ulaşılmaz oldu. Otomasyon zorunludur.

  • Certbot: Ubuntu/Debian'da certbot.timer otomatik kurulur, günde 2 kez kontrol eder
  • acme.sh: Kurulum sırasında cron'a otomatik girer (varsayılan günde 1 kez)
  • cPanel AutoSSL: WHM ayarlarından otomatik, günlük
  • Plesk: Let's Encrypt eklentisi 60 gün öncesinden yeniler
  • Manuel sertifikalar: Calendar reminder + Uptime Kuma sertifika süresi monitörü
  • Kubernetes: cert-manager ile Let's Encrypt veya ZeroSSL Issuer tanımlayın

Sertifika süresi izleme için UptimeRobot, Uptime Kuma veya kendi yazdığınız bir cron script'i kullanın; 14 gün kala uyarı yapacak şekilde ayarlayın.

Sık Karşılaşılan Hatalar ve Çözümleri

Mixed Content: HTTPS sayfanın içinde HTTP üzerinden yüklenen kaynak (img, script, iframe) varsa tarayıcı uyarı verir. Çözüm: tüm dahili linkleri protokol-relative (//) veya https:// ile yazın; CSP başlığına upgrade-insecure-requests ekleyin.

Eksik Intermediate: Sadece cert.pem sunup fullchain.pem sunmamak — Android cihazlarda ve eski Java'da hata. Daima fullchain.pem kullanın. Kontrol: https://www.ssllabs.com/ssltest/ raporu "Chain issues" satırı.

Hostname Mismatch: Sertifika example.com için ama site www.example.com'da çalışıyor. Çözüm: SAN içinde her iki domain'i de istemek (-d example.com -d www.example.com) veya wildcard sertifika almak.

Let's Encrypt Rate Limit: Aynı domain için haftada 50 sertifika; aynı subdomain seti için haftada 5 duplicate sertifika; başarısız doğrulama saatte 5 sınırı vardır. Test ederken staging environment'ı kullanın (--staging flag).

Wildcard + HTTP-01: Çalışmaz. Wildcard sertifikalar yalnızca DNS-01 challenge ile alınabilir; DNS sağlayıcınızda API ile TXT kaydı oluşturulması gerekir. Cloudflare, Route 53 ve Hetzner DNS API'leri Certbot/acme.sh ile entegre çalışır.

Cron Çalışmıyor: Otomasyon kurulu sanılan ama sertifika dolmuş — en yaygın hata. Yenileme komutunun çıktısını log'a yazdırın ve haftalık kontrol edin: certbot renew --post-hook "systemctl reload nginx" && logger -t certbot 'renew ok'.

PCI-DSS, KVKK ve Düzenleyici Gereksinimler

E-ticaret veya kart işleyen siteler için PCI-DSS 3.1+ artık TLS 1.0 ve 1.1'i tamamen yasaklar; minimum TLS 1.2 zorunluluğu vardır. Türkiye'deki KVKK uygulamasında kişisel veri taşıyan formların şifreli kanal üzerinden gönderilmesi "makul güvenlik tedbiri" olarak değerlendirilir. web.dev — Why HTTPS Matters konunun arka planını özetler.

Yüksek güvenlik gerektiren ortamlarda ek olarak: TLS 1.3-only, AEAD-only cipher (GCM/CHACHA20), HPKP yerine CAA + CT izleme, ECDSA P-256 anahtar, mTLS (client cert) admin paneller için, ve bağımsız penetration test raporu önerilir.

Hızlı Kontrol Listesi

  • fullchain.pem sunuyorum, eksik intermediate yok
  • TLS 1.2 ve 1.3 aktif, eski sürümler kapalı
  • HSTS başlığı 1 yıl ve includeSubDomains ile
  • CAA kaydı DNS'te mevcut
  • OCSP stapling aktif
  • Otomatik yenileme cron/timer çalışır durumda
  • SSL Labs A+ veya en az A
  • Mixed content yok, CSP upgrade-insecure-requests
  • Sertifika 30 gün kala alarm sistemi var
  • crt.sh üzerinde haftalık tarama

Web Güvenliği ve Uygulama Savunması

Modern web güvenliği katmanlı savunma (defense-in-depth) ile yapılır: TLS 1.3 ve HSTS ile şifreli iletişim, WAF (Web Application Firewall) ile OWASP Top 10 saldırılarına karşı koruma, BCrypt veya Argon2id ile parola hash'leme, JWT token'larında imza doğrulama (HMAC veya RSA), CSRF token + SameSite cookie ile cross-site istek koruması ve Content Security Policy ile XSS azaltma. SQL injection önleme için prepared statement, brute force için fail2ban veya rate limiting, DDoS koruması için Cloudflare/Anti-DDoS sağlayıcı zorunludur. Güvenlik açığı taraması (Burp Suite, OWASP ZAP) ve düzenli güvenlik denetimi; üretim ortamında veri sızıntısı ve hesap ele geçirme risklerini büyük ölçüde azaltır.

Kaynaklar

İlgili

SSL kurulumunda profesyonel destek alın

Let's Encrypt otomasyonu, ücretli OV/EV temini, A+ sertleştirme, HSTS preload başvurusu ve sertifika izleme için bize yazın

WhatsApp