HSTS Nedir?
HSTS (HTTP Strict Transport Security), bir web sitesinin tarayıcıya "bu siteye yalnızca HTTPS üzerinden bağlan" talimatı verdiği güvenlik mekanizmasıdır. HSTS aktif bir sitede, tarayıcı HTTP bağlantı denemelerini otomatik olarak HTTPS'e yükseltir — sunucuya bile HTTP isteği gitmez.
HSTS Nasıl Çalışır?
- Tarayıcı sitenizi ilk kez HTTPS ile ziyaret eder
- Sunucu
Strict-Transport-Securityheader'ı gönderir - Tarayıcı bu bilgiyi
max-agesüresi boyunca kaydeder - Sonraki ziyaretlerde HTTP linkleri otomatik HTTPS'e yükseltilir
# Temel HSTS header
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Yaygın HSTS Hataları
Hata 1: ERR_SSL_PROTOCOL_ERROR (HSTS Kaynaklı)
HSTS aktifken SSL sertifikası süresi dolarsa veya sorun yaşanırsa, tarayıcı siteyi HTTP ile de açmayı reddeder. Normal bir SSL hatasından farklı olarak, kullanıcı "Yine de devam et" seçeneğini göremez.
Çözüm
- SSL sertifikasını hemen yenileyin — HSTS varken sertifikasız kalmak siteyi tamamen erişilemez yapar
- Chrome'da
chrome://net-internals/#hstsadresinden domain'in HSTS kaydını silebilirsiniz (yalnızca kendi tarayıcınızda)
Hata 2: Subdomain'lerde SSL Yok ama includeSubDomains Aktif
includeSubDomains direktifi tüm alt alan adlarında HTTPS zorunlu kılar. Bir subdomain'de SSL yoksa o subdomain erişilemez olur.
Çözüm
- Tüm subdomain'lere SSL sertifikası yükleyin (Wildcard SSL ile tek seferde)
- Veya
includeSubDomainsdirektifini kaldırın
Hata 3: HTTP Sayfadan HSTS Gönderme
HSTS header'ı yalnızca HTTPS yanıtlarda geçerlidir. HTTP yanıtta gönderilen HSTS tarayıcılar tarafından yok sayılır.
Doğru Yapılandırma
# Nginx
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri; # Önce HTTPS'e yönlendir
}
server {
listen 443 ssl;
server_name example.com;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; # HSTS burada
}
Hata 4: max-age Çok Kısa veya Sıfır
max-age=0 HSTS'i devre dışı bırakır. Çok kısa süreler (birkaç saat) güvenliği zayıflatır.
Önerilen Ayarlar
| Aşama | max-age | Açıklama |
|---|---|---|
| Test | 300 (5 dakika) | İlk kurulumda güvenli test |
| Geçiş | 604800 (1 hafta) | Sorun yoksa artırın |
| Üretim | 31536000 (1 yıl) | Standart üretim değeri |
| Preload | 31536000+ (1 yıl+) | HSTS preload listesi için minimum |
HSTS Preload Nedir?
HSTS Preload, domain'inizi Chrome'un (ve diğer tarayıcıların) yerleşik HSTS listesine ekler. Bu sayede ilk ziyarette bile HTTP bağlantı denemesi yapılmaz.
Preload Gereksinimleri
- Geçerli SSL sertifikası
- HTTP → HTTPS yönlendirmesi
max-ageen az 31536000 (1 yıl)includeSubDomainsdirektifipreloaddirektifi
Başvuru: hstspreload.org adresinden domain'inizi gönderebilirsiniz.
⚠️ Uyarı: HSTS preload listesinden çıkmak haftalar alabilir. Emin olmadan başvurmayın.
HSTS Devre Dışı Bırakma
Acil durumlarda HSTS'i devre dışı bırakmak için:
# max-age=0 gönderin
add_header Strict-Transport-Security "max-age=0" always;
# Tarayıcılar max-age süresi dolduğunda HSTS kaydını silecektir
Sunucu Bazında HSTS Yapılandırması
# Nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# Apache (.htaccess veya VirtualHost)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# IIS (web.config)
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" />
</customHeaders>
Sonuç
HSTS, web sitenizin güvenliğini önemli ölçüde artıran güçlü bir mekanizmadır. Ancak doğru yapılandırılmadığında erişim sorunlarına neden olabilir. HSTS aktivasyondan önce tüm subdomain'lerde SSL sertifikası olduğundan emin olun, max-age değerini aşamalı olarak artırın ve preload listesine eklenmeden önce yapılandırmanızı iyice test edin.