HTTP Strict Transport Security (HSTS), mevcut en etkili ancak sıklıkla yanlış yapılandırılan web güvenlik başlıklarından biridir. Bu rehber; HTTPS'yi tüm sitelerinde zorunlu kılmak ve kullanıcılarını protokol düşürme saldırılarından, SSL soyma (SSL stripping) ve çerez ele geçirmeden korumak isteyen geliştiriciler, DevOps mühendisleri ve teknik yöneticiler için hazırlanmıştır. Adımları sırasıyla takip edin — ileriye atlamak ziyaretçilerin sitenize erişimini kalıcı olarak engelleyebilir.
HSTS'yi Etkinleştirmeden Önce Tam HTTPS Kapsamını Sağlayın
HSTS, tarayıcılara sitenize düz HTTP üzerinden asla bağlanmamasını söyler. Sitenizin herhangi bir bölümü hâlâ HTTP'ye bağımlıysa — tek bir resim, komut dosyası veya yönlendirme bile olsa — HSTS'yi etkinleştirmek bu kaynakları dönen ziyaretçiler için kalıcı olarak bozabilir. Önce tüm karışık içerik sorunlarını çözün.
- Etki alanınız ve kapsam altına almayı planladığınız tüm alt alan adları için güvenilir bir Sertifika Otoritesi'nden (CA) geçerli bir TLS/SSL sertifikası edinin ve kurun.
- Web sunucunuzun tüm HTTP trafiğini (80. port) 301 kalıcı yönlendirme ile HTTPS'ye (443. port) yönlendirdiğinden emin olun.
- Her sayfayı karışık içerik açısından denetleyin: tarayıcı geliştirici araçlarını açın, Konsol sekmesine gidin ve HTTPS sayfalarında güvensiz kaynakların yüklendiğine dair uyarıları arayın.
- HTML, CSS, JavaScript ve veritabanı kayıtlarındaki tüm sabit kodlanmış
http://URL'lerinihttps://veya protokol-bağımsız//URL'lere güncelleyin. - Üçüncü taraf yerleştirmelerin, yazı tiplerinin, analiz komut dosyalarının ve CDN varlıklarının tümünün HTTPS üzerinden yüklendiğini doğrulayın.
- SSL sertifikanızın geçerli, süresi dolmamış ve tüm ana bilgisayar adlarını (
wwwve kullandığınız diğer alt alan adları dahil) kapsadığını onaylayın.
Strict-Transport-Security Başlığını Sunucunuza Ekleyin
HSTS politikası, Strict-Transport-Security HTTP yanıt başlığı aracılığıyla iletilir. Bu başlık yalnızca HTTPS üzerinden gönderilmelidir — tarayıcılar, HTTP üzerinden alınan başlığı yok sayar. Aşağıda en yaygın web sunucuları için yapılandırma örnekleri verilmiştir.
- Apache: HTTPS
<VirtualHost>bloğunuzun içine aşağıdakini ekleyin (mod_headersetkin olmalıdır):Header always set Strict-Transport-Security "max-age=300" - Nginx: HTTPS
serverbloğunuzun içine aşağıdakini ekleyin:add_header Strict-Transport-Security "max-age=300" always; - IIS: IIS Yöneticisi → HTTP Yanıt Başlıkları üzerinden
Strict-Transport-Securityadında bir özel HTTP yanıt başlığı ekleyin; değer olarakmax-age=300girin veyaweb.configdosyasını kullanın:<customHeaders><add name="Strict-Transport-Security" value="max-age=300" /></customHeaders> - Node.js / Express:
helmetara yazılımını kullanın:app.use(helmet.hsts({ maxAge: 300 })); - Caddy: Caddyfile'ınızda bir HTTPS sitesi yapılandırdığınızda HSTS otomatik olarak etkinleştirilir; ancak şu şekilde özelleştirebilirsiniz:
header Strict-Transport-Security "max-age=300" - Dağıtımın ardından tarayıcınızın geliştirici araçlarını (Ağ sekmesi → herhangi bir yanıt seçin → Başlıklar) kullanarak başlığın HTTPS yanıtlarında göründüğünü doğrulayın.
max-age Direktifini Kademeli Olarak Yapılandırın
max-age değeri (saniye cinsinden), tarayıcılara HSTS politikasını ne kadar süre hatırlayacaklarını söyler. Test sırasında düşük bir değerle başlayın; böylece yanlış yapılandırmalardan kolayca kurtulabilirsiniz. Kendinizden emin olduğunuzda, üretim için önerilen değere çıkarın. Şunu unutmayın: bir tarayıcı uzun bir max-age değerini önbelleğe aldığında, başlığı daha sonra kaldırsanız bile bu süre boyunca HTTPS'yi zorunlu kılacaktır.
- Hazırlık ortamında hiçbir şeyi bozmadan başlığın çalıştığını doğrulamak için
max-age=300(5 dakika) ile başlayın. - Hazırlık doğrulamasının ardından, olası kullanıcı sorunlarını izlemek için
max-age=86400(1 gün) ile üretim ortamına dağıtın. - Bir haftalık kararlı çalışmanın ardından
max-age=2592000(30 gün) değerine yükseltin. - Bir aylık sorunsuz çalışmanın ardından nihai üretim değerini
max-age=31536000(1 yıl) olarak ayarlayın — bu değer, HSTS ön yükleme listesine başvuru için zorunludur. - HSTS önbelleklerinin ne zaman sona ereceğini ekibin bilmesi için mevcut
max-agedeğerini ve bitiş tarihini güvenlik çalışma kitabınıza belgeleyin.
includeSubDomains Direktifi ile Korumayı Genişletin
Varsayılan olarak HSTS yalnızca başlığı gönderen tam etki alanını korur. includeSubDomains eklemek, politikayı her alt alan adına genişletir (örn. api.example.com, mail.example.com). Bu direktifi, her alt alan adı geçerli HTTPS sunana kadar eklemeyin — hâlâ HTTP üzerinde olan herhangi bir alt alan adı, politikayı önbelleğe almış tarayıcılara sahip kullanıcılar için tamamen erişilemez hale gelir.
- Tüm alt alan adlarını (dahili, API, e-posta veya hazırlık amaçlı kullanılanlar dahil) listeleyin ve her birinin geçerli bir HTTPS sertifikasına sahip olduğunu doğrulayın.
- Yalnızca HTTP kullanan alt alan adlarını HTTPS'ye yönlendirin ya da hizmet dışı bırakın; ya da bunları HSTS kapsamında olmayan ayrı bir etki alanına taşıyın.
- HSTS başlığınızı direktifi içerecek şekilde güncelleyin:
Strict-Transport-Security: max-age=31536000; includeSubDomains - HTTPS'nin zorunlu kılındığını ve sertifika hatası görmediğinizi onaylamak için her alt alan adını bir tarayıcıda test edin.
preload Direktifini Etkinleştirin ve HSTS Ön Yükleme Listesi'ne Başvurun
Tarayıcı önbelleğindeki HSTS, kullanıcıları yalnızca ilk ziyaretlerinden sonra korur. HSTS Ön Yükleme Listesi, tarayıcı satıcıları (Chrome, Firefox, Safari, Edge) tarafından tutulan ve kullanıcının ilk isteğinde bile HTTPS'yi zorunlu kılan sabit kodlu bir listedir — böylece başlangıçtaki HTTP penceresi tamamen ortadan kalkar. Bu işlem kısa vadede geri alınamaz; bu nedenle yalnızca max-age ve includeSubDomains değerleriniz kararlı hale geldikten sonra devam edin.
- HSTS başlığınızın üç bileşeni de içerdiğinden emin olun:
max-age=31536000; includeSubDomains; preload. max-agedeğerinizin en az31536000(1 yıl) olduğunu doğrulayın — bu, ön yükleme listesine uygunluk için zorunlu bir koşuldur.- hstspreload.org adresini ziyaret edin, etki alanınızı girin ve başvurmadan önce tüm uygunluk kontrollerini geçtiğini doğrulayın.
- Etki alanınızı gönderin. Ön yükleme listesine dahil edilmenin birkaç hafta sürebileceğini ve listeyle birlikte gönderilen tüm tarayıcıları etkileyeceğini unutmayın.
- Ön yükleme listesinden çıkarılmanın da yayılması birkaç haftayı bulur — başvurmadan önce bu durumu planlayın.
- Başvurunun ardından, etki alanınızın durumunun "beklemede"den "ön yüklenmiş"e geçtiğini periyodik olarak hstspreload.org üzerinden izleyin.
HSTS Yapılandırmanızı Test Edin ve Doğrulayın
HSTS'yi doğrulama yapmadan dağıtmak risklidir. Başlığın doğru ayarlandığını, HTTPS yönlendirmelerinin çalıştığını ve karışık içerik kalmadığını teyit etmek için birden fazla yöntem kullanın. Sensagraph, sürekli güvenlik taramasının bir parçası olarak HSTS başlığının varlığını ve doğruluğunu otomatik olarak kontrol eder.
- Sitenizi Chrome'da açın, F12 ile DevTools'u açın, Ağ sekmesine gidin, sayfayı yenileyin, herhangi bir isteğe tıklayın ve yanıt başlıklarında
Strict-Transport-Securitybaşlığının doğru değerle göründüğünü doğrulayın. - Chrome'da
chrome://net-internals/#hstsadresine gidin, "HSTS/PKP alanını sorgula" alanına etki alanınızı girin ve beklenen politikayla listelendiğini onaylayın. http://alanadi.comadresininhttps://alanadi.comadresine 301 yanıtıyla (302 değil) yönlendirildiğini test edin.- Yanıt başlıklarını doğrudan incelemek için komut satırından
curl -I https://alanadi.comkomutunu çalıştırın. - Başlığın HTTP yanıtlarında bulunmadığını doğrulayın (yalnızca HTTPS'de görünmelidir).
- Herhangi bir içerik güncellemesinin veya yeni üçüncü taraf entegrasyonunun ardından karışık içerik için yeniden kontrol edin.
- Güvenlik başlıklarınız ve TLS yapılandırmanız hakkında bağımsız bir değerlendirme için securityheaders.com veya SSL Labs'ı kullanın.
İzleyin, Bakımını Yapın ve Sertifika Yenilemelerini Planlayın
HSTS, bir kez yapılandırılıp unutulabilecek bir kontrol değildir. HSTS uygulanırken TLS sertifikanızın süresi dolarsa, kullanıcılar siteden tamamen kilitlenir ve hatayı atlayacak hiçbir yol bulamazlar (normal bir sertifika uyarısının aksine, HSTS hataları "yine de devam et" seçeneğiyle geçilemez). Güçlü bir izleme sistemi kurmak hayati önem taşır.
- Let's Encrypt ile Certbot, AWS Certificate Manager otomatik yenileme veya CA'nızın eşdeğerini kullanarak otomatik sertifika yenileme ayarlayın — ve yenilemeye güvenmeden önce otomatik yenilemenin gerçekten çalıştığını test edin.
- TLS sertifika bitiş tarihinden en az 30 gün önce sizi bilgilendirecek uyarılar yapılandırın.
- HSTS başlığı doğrulamasını çalışma sürenizi izleyen sisteminize veya CI/CD pipeline'ınıza ekleyin; böylece bir sunucu değişikliğinin ardından başlık kaybolursa hemen haberdar olursunuz.
- Büyük altyapı değişikliklerinin ardından HSTS yapılandırmanızı gözden geçirin: sunucu göçleri, CDN değişiklikleri, yük dengeleyici güncellemeleri veya yeni alt alan adı dağıtımları.
- HSTS başlık durumunu ve sertifika bitiş tarihlerini düzenli güvenlik inceleme döngünüze dahil edin. Sensagraph, HSTS başlığınızı sürekli olarak izler ve yanlış yapılandırmaları ya da gerilemelerini otomatik olarak bildirir.
- Geri alma planınızı belgeleyin:
max-agedeğerini düşürmenin veya başlığı kaldırmanın sonuçlarını ve önbelleğe alınmış politikaların kullanıcı tarayıcılarında sona ermesinin ne kadar süreceğini bilin.