Modern web ortamında güvenlik sadece bir özellik değil, temel bir gerekliliktir. HTTP'den HTTPS'ye geçiş, e-ticaret siteleri için "olursa iyi olur" durumundan, SPA'lar ve API'ler de dahil olmak üzere her uygulama için temel bir beklentiye dönüşmüştür. Ancak SSL sertifikalarını etkinleştirmek artık yeterli değildir. Taşıma Katmanı Güvenliği (TLS) yapılandırmalarındaki hatalar, en sağlam uygulamaları bile indirgeme saldırılarına, ortadaki adam istismarlarına ve veri sızıntılarına karşı savunmasız bırakabilir. Bu rehber, şifre takımı seçimi, protokol sürümleri ve sunucu tarafı güçlendirme üzerine odaklanarak, güçlendirilmiş bir TLS yapılandırmasının kritik bileşenlerini incelemektedir.
Temel: Protokol Sürümleri ve Şifre Takımları
Bağlantınızı güvence altına almanın ilk adımı, eski protokoller kullanmadığınızdan emin olmaktır. BEAST ve POODLE gibi bilinen güvenlik açıkları nedeniyle TLS 1.0 ve TLS 1.1, büyük tarayıcılar ve IETF tarafından kullanımdan kaldırılmıştır. Sunucunuz yalnızca TLS 1.2'yi ve mümkün olduğunda TLS 1.3'ü desteklemelidir. TLS 1.3, el sıkışma gecikmesini azaltarak ve eski, güvensiz kriptografik özellikleri kaldırarak önemli performans iyileştirmeleri sunar.
Şifre takımlarının seçimi de equally önemlidir. Bir şifre takımı, anahtar değişimi, toplu şifreleme, mesaj kimlik doğrulaması ve karma üretimi için kullanılan algoritmayı tanımlar. AES-GCM ve ChaCha20-Poly1305 gibi AEAD (İlgili Veri ile Kimlik Doğrulamalı Şifreleme) şifrelerini önceliklendirmelisiniz; bunlar hem gizlilik hem de bütünlük sağlar. RC4 veya CBC tabanlı modlar gibi eski şifrelerden, yalnızca eski istemcilerle uyumluluk için kesinlikle gerekli olmadıkça kaçının ve hatta o durumda bile son çare olarak kullanın.
Pratik Yapılandırma: Nginx
Nginx popüler bir web sunucusu ve ters vekildir. Güvenli yapılandırması, protokol sürümlerini ve şifre tercihlerini zorlamak için açık yönergeler gerektirir. Aşağıda, sıkı güvenlik standartlarını uygulayan üretim için hazır bir kod parçası bulunmaktadır.
# Yalnızca modern protokolleri zorla
ssl_protocols TLSv1.2 TLSv1.3;
# Güvenliği istemci tercihinden üstün tutmak için sunucu şifre sırasını tercih et
ssl_prefer_server_ciphers on;
# Güçlü bir şifre takımı tanımla
# ECDHE ileri gizliliği sağlar, AES-GCM AEAD güvenliği sağlar
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';
# Protokol indirgeme saldırılarını önlemek için HSTS'yi etkinleştir
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
# Daha hızlı ve daha özel sertifika doğrulaması için OCSP Zarfı (Stapling)
ssl_stapling on;
ssl_stapling_verify on;
ssl_prefer_server_ciphers on dahil edilmesine dikkat edin. Bu olmadan, kötü niyetli bir aktör, istemci hello mesajında en zayıf şifre takımını ilk sıraya koyarak daha zayıf bir şifre takımı müzakere etmeye çalışabilir. Sunucu tercihini zorlayarak, yalnızca mevcut en güçlü şifre takımlarının kullanıldığından emin olursunuz.
Pratik Yapılandırma: Apache
Apache kullanıcıları için yapılandırma biraz farklıdır ancak aynı güvenlik hedeflerine ulaşır. Modern Apache sürümleri (2.4.8+), SSLProtocol ve SSLCipherSuite yönergelerini etkili bir şekilde destekler.
# SSLv3, TLSv1.0 ve TLSv1.1'i devre dışı bırak
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2 +TLSv1.3
# Mozilla'nın ara uyumluluk şifre dizgisini kullan
SSLCipherSuite 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
Apache, sunucunun Sertifika Otoritesi'nin yanıtını önbelleğe alarak gecikmeyi azaltan ve kullanıcı gizliliğini artıran SSLUseStapling on aracılığıyla OCSP Zarfı'nı (Stapling) etkinleştirerek de faydalanır.
HSTS'nin Kritik Rolü
HTTP Katı Taşıma Güvenliği (HSTS), protokollerin indirgeme saldırıları ve çerez gaspı gibi ortadaki adam saldırılarına karşı web sitelerini korumaya yardımcı olan bir politika mekanizmasıdır. Tarayıcıya sunucuyla yalnızca HTTPS kullanarak etkileşimde bulunmasını söyler. max-age yönergesi, tarayıcının bu politikayı ne kadar süreyle hatırlaması gerektiğini belirtir. Yüksek bir değere (örneğin 63072000 saniye veya iki yıl) ayarlanması önerilir. Ayrıca, includeSubDomains yönergesi alt tüm alt alan adlarının kapsandığını sağlar ve preload, alan adınızı bir tarayıcı önceden yükleme listesine göndermenize olanak tanır; bu da ilk ziyarette bile HTTPS'nin uygulandığını garanti eder.
Sonuç
HTTPS ve TLS yapılandırmasını güvence altına almak süreklilik gerektiren bir süreçtir. Kriptanaliz ilerledikçe, bugün güvenli kabul edilenler yarın savunmasız hale gelebilir. Yapılandırmalarınızı Mozilla'nın Gözlemcisi veya Qualys SSL Labs gibi araçlarla düzenli olarak denetlemek esastır. Modern protokolleri sıkı bir şekilde uygulayarak, ileri gizliliğe sahip güçlü şifre takımlarını kullanarak ve HSTS uygulayarak uygulamanız için sağlam bir güvenlik temeli sağlarsınız. Unutmayın, güvenlik bir yolculuktur, bir varış noktası değil; ancak güçlendirilmiş bir TLS yapılandırmasıyla başlamak en kritik ilk adımdır.