SSL / TLS En İyi Uygulamalar (Best Practices)

01 December 2025
Zusammenfassung: Bu makalede modern web uygulamalarında SSL/TLS yapılandırmasının en iyi güvenlik, performans ve uyumluluk uygulamaları adım adım ele alınır.

SSL / TLS En İyi Uygulamalar (Best Practices)

🎯 Giriş

Güvenli iletişim, modern web uygulamalarının en temel yapı taşlarından biridir.\ İnternet üzerindeki veri alışverişinin gizliliğini ve bütünlüğünü korumak için SSL (Secure Sockets Layer) ve halefi TLS (Transport Layer Security) protokolleri kullanılır.

Ne yazık ki birçok sistem hâlâ yanlış yapılandırılmış veya zayıf şifre paketleriyle (cipher suites) çalışmaktadır.\ Bu durum sadece kullanıcı verilerini değil, sistemin bütünlüğünü de riske atar.

Bu rehberde, TLS 1.3'ün sunduğu yeni özelliklerden, güvenli anahtar değişim algoritmalarına ve HSTS yapılandırmasına kadar modern bir SSL/TLS altyapısının nasıl oluşturulacağını adım adım inceleyeceğiz.


🧰 Gereksinimler

Bu rehberdeki örnekler aşağıdaki ortamı esas alır:

  • Sunucu: Ubuntu 22.04 LTS (veya benzeri Linux dağıtımı)\
  • Web Sunucusu: Nginx 1.24+ veya Apache 2.4.58+\
  • Araçlar: openssl, curl, testssl.sh\
  • Sertifika Sağlayıcı: Let's Encrypt (ücretsiz) veya ticari CA

Bilmeniz gereken temel konular:

  • Temel terminal komutları (bash)
  • SSL sertifika dizin yapısı (/etc/letsencrypt/live/)
  • Nginx veya Apache konfigürasyon mantığı

🧩 1. Doğru TLS Sürümünü Seçin

Günümüzde TLS 1.2 ve TLS 1.3 güvenli olarak kabul edilir.\ Ancak mümkünse yalnızca TLS 1.3'ü etkin bırakmak idealdir.\ Daha eski sürümler (TLS 1.0, TLS 1.1, SSLv3) artık zafiyetlidir ve kapatılmalıdır.

🔧 Nginx Örneği

ssl_protocols TLSv1.3 TLSv1.2;
ssl_prefer_server_ciphers on;

💡 İpucu:\ TLS 1.3, otomatik olarak güvenli cipher set'leri seçtiği için ssl_ciphers direktifine gerek yoktur.\ Ancak uyumluluk amaçlı TLS 1.2 aktifse, cipher listesi elle tanımlanmalıdır.

🔒 Apache Örneği

SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLHonorCipherOrder on

🧠 2. Cipher Suites'i Güvenli Hale Getirin

Cipher suite, bir bağlantının hangi algoritmalarla şifreleneceğini belirler.\ Zayıf veya eski algoritmalar (örneğin RC4, DES, 3DES) kesinlikle devre dışı bırakılmalıdır.

Önerilen Cipher Listesi (TLS 1.2 için)

ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:
             ECDHE-RSA-AES256-GCM-SHA384:
             ECDHE-ECDSA-CHACHA20-POLY1305:
             ECDHE-RSA-CHACHA20-POLY1305:
             ECDHE-ECDSA-AES128-GCM-SHA256:
             ECDHE-RSA-AES128-GCM-SHA256';

Bu liste: - Perfect Forward Secrecy (PFS) desteklidir.\

  • Güçlü anahtar değişim algoritmaları (ECDHE) kullanır.\
  • AES-GCM ve CHACHA20-POLY1305 gibi modern şifreleme yöntemlerini içerir.

🧩 Not:\ PFS, oturum anahtarının gelecekte ele geçirilse bile geriye dönük deşifre edilmesini engeller.


🧱 3. Sertifika Zincirini Doğru Oluşturun

Sertifika dosyanızın tam zinciri (full chain) tarayıcılara sunulmalıdır.\ Eksik ara sertifika (intermediate CA) sunmak, tarayıcı uyarılarına ve SSL puan kaybına neden olur.

Nginx İçin Doğru Yapı

ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

Apache İçin

SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

💡 Let's Encrypt otomatik olarak fullchain.pem dosyası oluşturur.\ Manuel CA kullananlar, intermediate dosyaları birleştirmelidir.


🧭 4. HSTS (HTTP Strict Transport Security)

HSTS, tarayıcılara sitenizin yalnızca HTTPS üzerinden erişilebileceğini bildirir.\ Bu özellik, SSL-strip saldırılarını önler.

Nginx Yapılandırması

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

Bu ayar: - 1 yıl boyunca yalnızca HTTPS bağlantısına izin verir. - Alt alan adlarını da kapsar. - Tarayıcı preload listesine eklenmeyi sağlar.

HSTS Preload Kontrolü

Tarayıcılarda otomatik preload listesine eklenmek için:\ 👉


🔁 5. OCSP Stapling Etkinleştirin

OCSP Stapling, sertifika geçerlilik doğrulamasını hızlandırır.\ Sunucu, CA'dan aldığı "onay damgasını" (OCSP response) kendi içinde saklar ve istemcilere gönderir.

Örnek Nginx Ayarları

ssl_stapling on;
ssl_stapling_verify on;
resolver 1.1.1.1 8.8.8.8 valid=300s;
resolver_timeout 5s;

⚙️ Neden önemli?\ OCSP stapling etkin değilse, her istemci kendi doğrulama sorgusu yapar --- bu da bağlantıyı yavaşlatır ve gizlilik riski doğurur.


🔐 6. Perfect Forward Secrecy (PFS)

Perfect Forward Secrecy (Mükemmel İleri Gizlilik), geçmiş oturumların sonradan çözülmesini engeller.\ Modern tarayıcılar, PFS destekli ECDHE algoritmalarını zaten destekler.

Kontrol Etmek İçin

openssl s_client -connect example.com:443 -tls1_2 | grep "Cipher"

Sonuçta ECDHE veya DHE ifadeleri görünüyorsa PFS etkin demektir.


🔄 7. Sertifika Yenileme ve Otomasyon

Sertifikaları manuel yenilemek hem zaman kaybı hem de risklidir.\ Let's Encrypt kullanıyorsanız, cron job veya systemd timer ile otomatik yenileme önerilir.

Cron Job Örneği

sudo crontab -e

Aşağıdaki satırı ekleyin:

0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"

Bu görev: - Her gece 03:00'te yenileme denemesi yapar. - Başarılı olursa Nginx'i yeniden yükler.

🧠 İpucu:\ Test etmek için --dry-run parametresiyle simülasyon yapabilirsiniz:

sudo certbot renew --dry-run

🧪 8. SSL Testleri ve Doğrulama

1️⃣ SSL Labs Testi

Ziyaret edin:\ 👉

Hedef domaininizi girin, birkaç dakika içinde güvenlik derecelendirmesini (A+--F) alırsınız.

2️⃣ testssl.sh Aracı

git clone https://github.com/drwetter/testssl.sh.git
cd testssl.sh
./testssl.sh https://example.com

Bu araç: - Tüm protokol desteğini listeler.\

  • Zayıf cipher'ları tespit eder.\
  • HSTS/OCSP yapılandırmasını test eder.

📋 9. Performans İyileştirmeleri

Güvenli bağlantılar her zaman yavaş olmak zorunda değildir.\ Aşağıdaki adımlarla TLS bağlantılarını hızlandırabilirsiniz:

  • HTTP/2 ve HTTP/3 (QUIC) desteğini etkinleştirin.\
  • Session resumption (0-RTT) özelliğini TLS 1.3 ile kullanın.\
  • Sertifika anahtar uzunluğunu 2048-bit yerine ECC (P-256) ile optimize edin.\
  • CDN veya reverse proxy (Cloudflare, Nginx Proxy Manager) ile önbellekleme yapın.

HTTP/2 Etkinleştirme

listen 443 ssl http2;

Not: HTTP/2 ile birlikte bağlantı başına çoklu istek (multiplexing) aktif olur --- bu da sayfa yükleme süresini ciddi şekilde azaltır.


🧱 10. Güvenli Redirect Yapısı

HTTP'den HTTPS'ye geçişte yönlendirmeler dikkatli yapılmalıdır.\ Yanlış yönlendirme zincirleri SEO ve performans kaybına yol açar.

Nginx İçin En Basit ve Güvenli Yönlendirme

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

💡 return 301 kalıcı yönlendirmedir; tarayıcılar bu yönlendirmeyi önbelleğe alır.


🧰 11. Güvenlik Başlıklarını (Headers) Ekleyin

SSL/TLS sadece şifreleme sağlar; tarayıcı güvenliği için HTTP başlıklarını da ekleyin:

add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header Referrer-Policy "strict-origin";
add_header Permissions-Policy "geolocation=(), microphone=()";
add_header Content-Security-Policy "default-src 'self';";

Bu başlıklar: - Clickjacking, MIME-sniffing, cross-site tracking gibi tehditleri azaltır.\

  • SSL yapılandırmasıyla birlikte tarayıcı tarafında ek koruma sağlar.

🧮 12. Sertifika Türleri ve Kullanım Alanları


Tür Kullanım Alanı Özellik


DV (Domain Kişisel bloglar, küçük siteler Hızlı, otomatik Validation)

OV Kurumsal web siteleri Kimlik doğrulaması (Organization içerir Validation)

EV (Extended Finans, e-ticaret Tarayıcı adres Validation) çubuğunda doğrulama

Wildcard *.example.com Alt alan adları için geçerli

SAN (Subject Çoklu domain Birden fazla alan adı Alt Name) için tek sertifika

🔍 Öneri:\ Kurumsal sistemlerde OV veya EV sertifikaları tercih edilmelidir.\ Ancak otomasyon ve hız öncelikli ise Let's Encrypt DV sertifikaları yeterlidir.


🔎 13. Loglama ve İzleme

SSL hatalarını tespit etmek için erişim ve hata log'larını etkin izleyin:

Nginx

tail -f /var/log/nginx/error.log | grep ssl

Let's Encrypt yenileme log'u

sudo cat /var/log/letsencrypt/letsencrypt.log

Ayrıca Prometheus + Grafana gibi araçlarla sertifika bitiş tarihlerini izlemek mümkündür.


🧩 14. Örnek Komple Nginx Yapılandırması

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

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

    ssl_protocols TLSv1.3 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:
                 ECDHE-RSA-AES256-GCM-SHA384:
                 ECDHE-ECDSA-CHACHA20-POLY1305:
                 ECDHE-RSA-CHACHA20-POLY1305:
                 ECDHE-ECDSA-AES128-GCM-SHA256:
                 ECDHE-RSA-AES128-GCM-SHA256';

    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 1.1.1.1 8.8.8.8 valid=300s;
    resolver_timeout 5s;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
    add_header Referrer-Policy "strict-origin";
    add_header Content-Security-Policy "default-src 'self';";

    root /var/www/html;
    index index.html index.php;
}

🧭 Sonuç

Doğru yapılandırılmış bir SSL/TLS ortamı yalnızca şifreli iletişim sağlamaz --- aynı zamanda kullanıcı güveni, SEO puanı ve performans açısından da büyük fark yaratır.

Bu rehberde: - TLS 1.3 ve modern cipher'ların önemini,\

  • HSTS, OCSP, PFS gibi koruma katmanlarını,\
  • Otomatik yenileme ve test araçlarını\ adım adım ele aldık.

Artık sisteminiz yalnızca "yeşil kilit" göstermekle kalmayacak; aynı zamanda A+ düzeyinde bir güvenlik puanına sahip olacak.


📚 Ek Kaynaklar

Zurück zur Artikelseite