İçindekiler
- 1 Bugün Sunucuda Küçük Bir Kıvılcım: TLS 1.3’le Tanıştığım O An
- 2 TLS 1.3’ün Mutfağı: Modern Şifre Takımları ve PFS’nin Günlük Hayat Dili
- 3 Nginx’te TLS 1.3, PFS ve HSTS: Ocakları Yakıyoruz
- 4 Apache’de Aynı Gülümseme: TLS 1.3, OCSP Stapling ve HSTS
- 5 OCSP Stapling’in Kulis Hâli: Zincir, DNS ve Ateş Hattı
- 6 HSTS Preload’a Ne Zaman Cesaret Etmeli? Kontrollü Bir Yolculuk
- 7 Performans ve Hata Ayıklama: küçük komutlar, büyük rahatlık
- 8 Kenar Vakalar: Eski İstemciler, dertli kütüphaneler
- 9 Gerçek Hayattan Küçük Bir Senaryo: Adım adım, tedirginlik olmadan
- 10 Kapanış: Güvenin Sessiz Sesi
Bugün Sunucuda Küçük Bir Kıvılcım: TLS 1.3’le Tanıştığım O An
Hiç başınıza geldi mi? Gece vakti bir arkadaşınız mesaj atar: “Site hızlı ama tarayıcı kilit ikonunda bir uyarı var, bir bakabilir misin?” İşte o an, kahveyi tazelersiniz ve gözler otomatik olarak sunucunun Nginx ya da Apache yapılandırmasına kayar. Ben böyle bir akşam, TLS 1.3’ün ne kadar tatlı bir güç çarpanı olduğunu, OCSP stapling’in ‘arka planda işleri yağ gibi akıtan’ rolünü ve HSTS preload’ın, tüm mahalleyi HTTPS sokağında tutan sağlam kapısını yeniden hatırladım. PFS ise geçmişi güvene alan, geleceğe göz kırpan bir özellik gibi, adeta kasada ‘tek kullanımlık anahtar’ taşımak gibi.
Bu yazıda, bir arkadaş sohbeti tadında, ıslak imzalı bir rehber bırakmak istiyorum. TLS 1.3’ü güvenle açmak, modern şifre takımlarını seçmek, OCSP stapling’i doğru zincirle ayağa kaldırmak, HSTS preload’a adım adım ve bilinçle girmek, PFS’yi standart hâline getirmek… Hepsini birlikte, Nginx ve Apache üstünde yürütelim. Mesela şöyle düşünün: Mutfakta bir tarif var, malzemeler belli, pişirme süresi net. Yalnızca ısıyı iyi ayarlarsak, sonuç harika olacak. Hadi başlayalım.
TLS 1.3’ün Mutfağı: Modern Şifre Takımları ve PFS’nin Günlük Hayat Dili
Modern şifre takımları nedir, neden umursayalım?
Güvenli bir bağlantı dediğimizde, aslında tarayıcı ile sunucu arasında el sıkışan bir sürü küçük kuraldan bahsediyoruz. TLS 1.3 bu el sıkışmayı kısaltıyor, gereksiz yükleri eliyor ve daha sağlam malzemelerle yola çıkıyor. Modern şifre takımlarında ECDHE gibi ‘geçici anahtar’ kullanan yöntemler öne çıkıyor. Bu sayede her oturum için ayrı bir gizli anahtar oluşuyor. Bu, biraz her buluşmada farklı bir mekânda görüşmek gibi; biri geçmiş mekânı bulsa bile, diğer buluşmalar güvende kalıyor.
PFS’yi (Perfect Forward Secrecy) basitçe nasıl anlatırız?
Mesela şöyle düşünün: Bir gün kasa anahtarınız kayboldu. Kötü haber. Ama geçmişteki kasalar tek kullanımlık anahtarla saklanmışsa, geçmişe dönüp teker teker açamıyorlar. PFS tam olarak bunu sağlıyor. ECDHE temelli şifre takımlarıyla birlikte, oturum anahtarları kısa ömürlü ve tek seferlik. Yani bugün bir anahtar sızsa bile, dün ve ondan önceki gün güvenle uyuyor.
TLS 1.3’ün huzuru
TLS 1.3, gereksiz eski yöntemleri devreden çıkarıyor ve hızlı bağlantı kuruyor. Bu hız, sayfa açılışında fark edilir bir pürüzsüzlük getiriyor. Ekstra güzel tarafı, modern tarayıcılarda neredeyse ‘kur ve unut’ deneyimi yaşatması. Tabii doğru yapılandırmayla ve ufak testlerle.
Nginx’te TLS 1.3, PFS ve HSTS: Ocakları Yakıyoruz
Başlangıç: Sertifika ve zincir dosyaları
Önce temel malzemeler: Geçerli bir sertifika, özel anahtar ve zincir (chain). Let’s Encrypt kullanıyorsanız genelde ‘fullchain.pem’ ve ‘privkey.pem’ ile tanışırsınız. Nginx tarafında bu dosyaları doğru göstermek, OCSP stapling için ayrıca bir ‘trusted’ zincir belirtmek önemli. Bir de güvenilir DNS çözümleyici eklemek, stapling’in değeri için gerçek bir dönüm noktası.
Nginx yapılandırması: TLS 1.3 ve modern şifreler
Aşağıdaki örneği, siteye özel sunucu bloğunuza uygun şekilde uyarlayın. Burada TLS 1.2’yi modern şifre takımlarıyla tutuyor, TLS 1.3’ü açıyor, PFS için eğilimli eğrileri (curve) belirliyoruz. HSTS’yi dikkatle ve bilinçli açıyoruz. OCSP stapling için resolver ve trusted zinciri tanımlıyoruz.
server {
listen 443 ssl http2;
server_name ornek.com www.ornek.com;
ssl_certificate /etc/letsencrypt/live/ornek.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ornek.com/privkey.pem;
# TLS sürümleri
ssl_protocols TLSv1.2 TLSv1.3;
# TLS 1.2 için modern şifreler (TLS 1.3 kendi setini yönetir)
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:
ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers off;
# PFS için eğriler
ssl_ecdh_curve X25519:secp256r1;
# Oturum ayarları
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 1.1.1.1 8.8.8.8 valid=300s;
resolver_timeout 5s;
ssl_trusted_certificate /etc/letsencrypt/live/ornek.com/chain.pem;
# HSTS (preload adımına geçmeden önce mutlaka test edin)
add_header Strict-Transport-Security 'max-age=63072000; includeSubDomains; preload' always;
# Güvenli başlıklar (temel)
add_header X-Content-Type-Options 'nosniff' always;
add_header X-Frame-Options 'SAMEORIGIN' always;
root /var/www/ornek.com/public;
index index.html;
}
Buradaki şifre dizilimi, yaygın ve modern tarayıcılarla uyumlu bir çekirdek sunuyor. TLS 1.3’te şifre takımı seçimi sunucu tarafından değil protokol tarafından daha net yönetildiği için, odak daha çok TLS 1.2’nin temiz tutulmasında. ssl_ecdh_curve ile X25519 ve secp256r1 genellikle temiz bir yol. ssl_session_tickets off güvenlik açısından iyi bir tercih; taşıma anahtarlarını ‘takılı kalmaktan’ uzak tutar.
Test etmek: Küçük adımlar, net sonuçlar
İlk kontrolü tarayıcıyla yaparsınız, ama konsol testleri net konuşur. Bir OCSP stapling durumunu görmek için:
openssl s_client -connect ornek.com:443 -status -servername ornek.com < /dev/null | sed -n '/OCSP response:/,/---/p'
Yanıta gömülü bir OCSP görüyorsanız, stapling çalışıyor demektir. Ayrıca hızlı bir başlık kontrolü için:
curl -I https://ornek.com | grep -i strict-transport-security
Gelişmiş ve dışarıdan bakan bir göz için ayrıntılı SSL testi işinizi kolaylaştırır. Bazen en net geribildirimler, dışarıdan bakan bu tür araçlarla gelir. Sonuçları bir kahveyle gözden geçirmek keyifli olabilir.
Apache’de Aynı Gülümseme: TLS 1.3, OCSP Stapling ve HSTS
Modüller ve temel taşlar
Apache cephesinde mod_ssl, headers ve http2 gibi modüller sahneye çıkar. Çekirdek yapı basit: TLS 1.3’ü aç, TLS 1.2’ye modern şifreleri koy, stapling’i devreye al, HSTS başlığını dikkatle ekle. Zincir dosyaları yine sahnede. Let’s Encrypt kullananlar için genellikle SSLCertificateFile ve SSLCertificateKeyFile ile fullchain ve privkey gösterilir.
Apache yapılandırması: Şefin not defteri
<VirtualHost *:443>
ServerName ornek.com
ServerAlias www.ornek.com
Protocols h2 http/1.1
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/ornek.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ornek.com/privkey.pem
# TLS sürümleri
SSLProtocol TLSv1.2 TLSv1.3
# TLS 1.2 için modern şifreler
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:
ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
SSLHonorCipherOrder off
# PFS için eğriler (OpenSSL 1.1.1+)
SSLOpenSSLConfCmd Curves X25519:secp256r1
# Oturum biletleri
SSLSessionTickets off
# OCSP Stapling
SSLUseStapling on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache shmcb:/var/run/ocsp(128000)
# HSTS
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
DocumentRoot /var/www/ornek.com/public
</VirtualHost>
Apache’de stapling için Cache direktifini unutursanız, mutfakta tuzu atlamış gibi olursunuz; sonuç ‘olmuş’ hissi vermez. Ayrıca Curves ayarı, PFS’in pratik sahnesini güzelleştirir. TLS 1.3’te yine işiniz kolay; asıl temizlik TLS 1.2 şifrelerinde.
Apache testleri ve küçük tüyo
Başlıklar için:
curl -I https://ornek.com | egrep -i 'strict-transport-security|server|date'
Stapling kontrolü yine openssl s_client ile. Eğer zincirle ilgili hata alırsanız, genellikle kök ve ara sertifika dosyalarının doğru gösterilmediğini görürsünüz. Böyle durumlarda ‘fullchain’ yerine yanlışlıkla yalnızca ‘cert’ dosyası verilmiş olur. Küçük bir düzeltmeyle sorun çözülür.
OCSP Stapling’in Kulis Hâli: Zincir, DNS ve Ateş Hattı
Neden ‘trusted’ zincire ihtiyaç var?
Stapling, yetkili kurumdan (CA) güncel ‘sertifika durumu’ alıp, bunu el sıkışmaya ekliyor. Tarayıcı da “Ben bu bilgiyi CA’dan alırdım, ama sunucu bana çoktan verdi” diyor ve geçiş hızlanıyor. Bunun için sunucunun CA ile konuşması gerekli. Bu yüzden ssl_trusted_certificate gibi bir ayarla, doğru ara sertifikaları gösteririz. Yanlış dosya, yanlış sonuç.
DNS ve firewall ayrıntıları
resolver ayarı, stapling sorgularının düzgün çıkması için kritik. Güvenilir bir DNS verin. Firewall’da dışarıya 80/443 çıkışı kapalıysa, stapling bilgisi tazelenemez. ‘Dışarıyla nabız yoklamak’ için küçük bir pencere bırakmak şart. Nginx’te resolver_timeout gibi ufak ayarlar da ağın akışını yumuşatır.
Yenileme ve günlükler
Let’s Encrypt otomatik yenilemede bazen zincir değişir; stapling buna hassas. Yenileme sonrasında Nginx/Apache yeniden yüklemesi iyi bir alışkanlık. Log’larda ‘OCSP’ geçen satırlar çoğu zaman en hızlı ipucudur. Hata mesajının dili bazen serttir ama çözüm genellikle dosya yolu ya da DNS tarafındadır.
HSTS Preload’a Ne Zaman Cesaret Etmeli? Kontrollü Bir Yolculuk
HSTS’in özeti
HSTS, “Bu alan adıyla artık yalnızca HTTPS konuşacağız” demek. Tarayıcıya net bir çerçeve çiziyor. Preload ise bir adım daha ileri gidip, bu kuralın tarayıcıların içine önceden yazılması. Yani kullanıcı, siteye ilk kez gelse bile doğrudan HTTPS’e yönlendiriliyor.
Preload öncesi checklist
Burası önemli. Tüm alt alan adlarınızın da HTTPS olduğundan emin olun. http’den https’e yönlendirme kalıcı ve eksiksiz olmalı. includeSubDomains ve preload parametrelerini başlığa eklemeden önce, tüm taşlar yerine otursun. Çünkü geri dönüş süreci zahmetli olabilir. Preload listesine girmeden önce test domainlerinde, hatta alt alanların her birinde kısa süreli deneme yapmak rahatlatır.
Başvuru ve doğrulama
Hazırsanız, HSTS preload listesi başvurusu için birkaç alan doldurup başvurabilirsiniz. Tarayıcılar bu listeyi düzenli olarak içlerine alır. Başvurudan sonra yine birkaç gün gözlemlemek, “Acaba alt alanlardan biri mi eksik kaldı?” kaygısını minimize eder. İlk kez yaptığınızda içiniz pır pır eder ama doğru kurulumla pırıl pırıl bir sonuç gelir.
Performans ve Hata Ayıklama: küçük komutlar, büyük rahatlık
Hız ve sadelik
TLS 1.3’in kısa el sıkışması, özellikle uzak veri merkezlerinde fark edilir. HTTP/2 ve HTTP/3 ile birleşince daha da tatlanır. Bu konuda dilerseniz Nginx’te TLS 1.3 ve stapling’i kurarken dikkat edeceğiniz noktaları detaylı bir örnek üzerinden de inceleyebilirsiniz. Oradaki akış, burada anlattıklarımızı tamamlayıcı nitelikte.
Pratik test komutları
Hızlı TLS sürümü ve el sıkışma özetini görmek için:
openssl s_client -connect ornek.com:443 -tls1_3 -servername ornek.com < /dev/null | head -n 25
HTTP/2’nin açık olduğunu görmek için:
curl -I --http2 https://ornek.com
Başlıkların, yönlendirmelerin ve sertifika zincirinin dışarıdan nasıl göründüğünü toplu bir rapordan okumak isterseniz ayrıntılı SSL testi zaten vazgeçilmez bir durak. Bir de örnek yapılandırmalar ve güncel öneriler için Mozilla’nın SSL yapılandırma önerileri mutfakta elinizin altında olsun; küçük farklılıklar için harika bir referans.
Kenar Vakalar: Eski İstemciler, dertli kütüphaneler
Eski tarayıcılar ve TLS 1.0/1.1
Arada bir, çok eski sistemlere sahip kullanıcılar çıkabilir. TLS 1.0 ve 1.1’i kapatınca, bu küçücük bir kesim etkilenir. Eğer özel bir B2B müşteriniz eski bir istemci kullanıyorsa, onlarla konuşup geçiş planı yapmak iyi olur. Kısa vadede TLS 1.2’yi modern şifrelerle açık tutmak, çoğu durumda yeterlidir. Ama TLS 1.3’ü esas alıp, TLS 1.2’yi bir ‘can yeleği’ gibi görmek iyi bir bakış açısı.
Kurumsal denetim cihazları ve ara katmanlar
Kurumsal ağlarda SSL/TLS’i kırıp izleyen cihazlar, bazen modern ayarlarla kapris yapar. Böyle bir ortamda deneme ortamında test yapmak, canlıya taşıma sırasında “Bize niye bağlanamadı?” sorusunu en aza indirir. Gerekirse yalnızca o ağ için alternatif bir uç nokta sunmak, çözüme giden yolu kısaltır.
Gerçek Hayattan Küçük Bir Senaryo: Adım adım, tedirginlik olmadan
Adım 1: Mevcut durumu görün
Önce bir rapor alın. Sertifikalar güncel mi, zincir doğru mu, protokoller nasıl? Küçük bir not defterine yazın. HSTS yoksa, başlığa dokunmadan önce tüm alt alanlarınızı tarayın. OCSP stapling’i açmadan önce resolver ayarınızı ve firewall çıkışınızı netleştirin.
Adım 2: TLS 1.3’ü açın, TLS 1.2’yi sadeleştirin
Nginx/Apache örneğini uygulayın. Kod bloklarını bire bir kopyalamak yerine alan adlarınıza ve dosya yollarınıza uyarlayın. ECDHE ve GCM’li şifreler, hem hız hem güvenlik açısından omurganız olsun. Eğrilerde X25519 tercih edilirse, güncel tarayıcılarla pürüzsüz çalışır.
Adım 3: Stapling’i doğrulayın
openssl s_client çıktısında OCSP response bloklarını görmek, iç ferahlatır. Eğer boşsa, zincir dosyası ve resolver ayarlarına geri dönün. Bazen bir SELinux bağlamı ya da yetki hatası da sebep olabilir. Log’ları sakin sakin okuyun.
Adım 4: HSTS’i önce risksiz açın
İlk başta preload koymadan yalnızca max-age’i belirleyin. Yönlendirmelerinizin eksiksiz olduğundan emin olun. Birkaç gün izleyin. Sorunsuzsa includeSubDomains ve preload ile vites yükseltin. Sonra da HSTS preload listesi başvurusu ile noktayı koyun.
Adım 5: Son tur test ve canlı izleme
SSLLabs raporunu bir kez daha alın. curl ve openssl komutlarıyla özetleri doğrulayın. CDN ya da ters vekil kullanıyorsanız, uçlardan gelen başlıkların değişmediğini kontrol edin. Sonrasında grafiklere bakın; hata sayıları aşağı, memnuniyet yukarı gitsin.
Kapanış: Güvenin Sessiz Sesi
İyi kurulmuş bir TLS 1.3, modern şifre takımlarıyla birlikte arkada huzurla çalışır. OCSP stapling, tarayıcının “Durum sorgusu” yükünü omuzlar ve sayfanın pürüzsüz açılmasına yardım eder. HSTS preload ise giriş kapısına sağlam bir kilit vurur; bütün ev halkını HTTPS sokağına taşır. PFS de bugünün anahtarı yarını kurtarmasın diye gizli bir kahraman gibi nöbet tutar. Dışarıdan bakan kullanıcı için bunların çoğu görünmez, ama hissettirir.
Pratik tavsiyem şu: Küçükten başlayın, her adımı test edin, sonra bir vites artırın. Gerekirse bir deneme alan adıyla ya da alt alanla başlayın. HSTS preload’ı aceleye getirmeyin; alt alanlarınız tam hazır olsun. Nginx ya da Apache tarafında ufak bir satırın ne kadar etkili olduğunu gördükçe, içinizin ısındığını fark edeceksiniz. Umarım bu rehber birkaç akşamüstünüze keyif katar ve sizin mutfaktan çıkan siteler daha güvenli, daha pürüzsüz hissedilir. Bir sonraki yazıda görüşmek üzere; sorularınız olursa birlikte kurcalamaya bayılırım.
