🎯 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_ciphersdirektifine 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.pemdosyası 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-runparametresiyle 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 301kalı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
- Mozilla SSL Configuration Generator\
- Let's Encrypt Docs\
- Qualys SSL Labs Test\
- [OWASP TLS Cheat