İçeriğe atla
+90 552 219 16 99 Hafta içi 09:00 – 18:00
Müşteri Paneli
CIR.Blog Hosting al

HSTS Nedir? Strict-Transport-Security Başlığı ve Preload Riski

5 dakika okuma SSL ve Güvenlik
HSTS Nedir? Strict-Transport-Security Başlığı ve Preload Riski - CIR blog kapak gorseli

Siteyi HTTPS’e yönlendirdiniz, kilit simgesi görünüyor. Yine de küçük bir açık kalır: ziyaretçi adres çubuğuna siteadi.com yazdığında tarayıcı ilk isteği HTTP olarak gönderir. Sunucu bu isteği 301 ile HTTPS’e çevirir, ama o ilk istek şifresiz gider.

Aynı ağ üzerindeki bir saldırgan (ortak Wi-Fi, ele geçirilmiş modem) bu ilk isteği yakalayıp yönlendirmeyi kendi üzerine çekebilir. Bu saldırı SSL stripping adıyla bilinir ve yönlendirme kuralı ne kadar doğru yazılmış olursa olsun engellenemez, çünkü sorun ilk pakettedir.

HSTS (HTTP Strict Transport Security) tam olarak bu boşluğu kapatır. Sunucu bir kere “bu alan adına bundan sonra yalnızca HTTPS ile bağlan” der, tarayıcı bunu kaydeder ve sonraki ziyaretlerde HTTP isteğini hiç göndermeden doğrudan HTTPS’e geçer.

Başlık nasıl çalışır

HSTS tek bir HTTP yanıt başlığından ibarettir:

Strict-Transport-Security: max-age=31536000; includeSubDomains

Tarayıcı bu başlığı gördüğünde alan adını kendi iç listesine yazar. Süre dolana kadar, kullanıcı adres çubuğuna http:// yazsa bile tarayıcı isteği sunucuya göndermeden HTTPS’e çevirir. Ayrıca sertifika hatası durumunda gösterilen “yine de devam et” bağlantısı kaldırılır; kullanıcı uyarıyı atlayamaz.

Önemli bir ayrıntı: başlık yalnızca HTTPS yanıtlarında geçerlidir. HTTP yanıtına eklerseniz tarayıcı görmezden gelir.

Parametreler

  • max-age — Kuralın saniye cinsinden geçerlilik süresi. 31536000 bir yıl demektir. Her ziyarette sayaç sıfırlanıp yeniden başlar. max-age=0 yazmak kuralı iptal eder.
  • includeSubDomains — Kural bütün alt alan adlarını kapsar. blog.siteadi.com, panel.siteadi.com, test.siteadi.com dâhil hepsi HTTPS zorunlu hale gelir. En çok soruna yol açan parametre budur.
  • preload — Alan adının tarayıcılarla birlikte dağıtılan sabit listeye eklenmek üzere aday olduğunu belirtir. Bunu eklemek tek başına listeye girmenizi sağlamaz, ayrıca başvuru yapmak gerekir.

.htaccess ile ekleme

Apache veya LiteSpeed çalışan paylaşımlı hostingde public_html/.htaccess dosyasına şu bloğu ekleyin:

<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" env=HTTPS
</IfModule>

Nginx kullanıyorsanız sunucu bloğuna add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; satırı gelir. Başlığın gerçekten gittiğini görmek için tarayıcıda F12 > Ağ sekmesinde ana belgeyi seçip Yanıt Başlıkları listesine bakın.

Preload listesi ve geri dönüşü olmayan risk

Preload listesi Chrome, Firefox, Safari ve Edge’in kaynak koduna gömülü bir alan adı listesidir. Listeye giren alan adı, tarayıcı siteyi hiç ziyaret etmemiş olsa bile ilk istekten itibaren HTTPS zorunlu sayılır. İlk ziyaret boşluğu tamamen kapanır.

Bedeli ağırdır. Listeye girmek için max-age en az 31536000 olmalı, includeSubDomains ve preload parametreleri bulunmalıdır. Girdikten sonra çıkmak istediğinizde:

  1. hstspreload.org üzerinden çıkarma talebi açarsınız.
  2. Talep işlenip yeni tarayıcı sürümüne girmesi aylar sürer.
  3. Kullanıcıların o sürüme güncellemesi ayrıca zaman alır.

Yani listeye girdikten sonra alan adınızın herhangi bir alt adını HTTP üzerinden yayınlamak pratikte 6-12 ay boyunca imkânsız hale gelir. Bu, geri alınabilir bir ayar değildir.

Açmadan önce kontrol listesi

Kontrol Neden önemli
Tüm alt alan adları HTTPS ile çalışıyor mu? includeSubDomains ile birlikte sertifikasız her alt ad erişilemez olur
Sertifika otomatik yenileniyor mu? HSTS aktifken süresi dolan sertifikada kullanıcı uyarıyı atlayamaz, site tamamen kapanır
HTTP üzerinden çalışan bir servis var mı? Eski yazıcı arayüzü, IoT paneli, ödeme callback’i gibi noktalar bozulur
Karma içerik temizlendi mi? HTTP kaynaklar zaten engellenir, önce düzeltilmeli
Cloudflare SSL modu Full (strict) mü? Flexible modda uçtan uca şifreleme yoktur

Alt alan adı konusu özellikle önemlidir. Şirketlerde çoğu zaman unutulmuş bir eski.siteadi.com ya da yalnızca iç ağdan erişilen bir kamera.siteadi.com bulunur. Alt alan adlarının tamamını DNS panelinden listeleyip her birinin geçerli sertifikası olduğunu doğrulamadan includeSubDomains eklemeyin.

Yanlış kurulumda ne olur

Tipik senaryo şudur: Bir şirket ana sitede HSTS’i bir yıllık max-age ve includeSubDomains ile açar. Ertesi hafta pazarlama ekibi kampanya.siteadi.com adında bir alt alan adı oluşturur, sertifika kurmayı unutur. Siteye giren herkes NET::ERR_CERT_COMMON_NAME_INVALID hatası alır ve “gelişmiş” bağlantısı görünmediği için devam edemez. Ziyaretçinin tek çıkışı tarayıcı ayarlarından HSTS kaydını elle silmektir; bunu kimse yapmaz.

Kademeli açmak bu riski neredeyse sıfırlar. İlk hafta max-age=300 (5 dakika) ile başlayın, sorun çıkmazsa max-age=86400 (1 gün), sonra bir haftaya, ardından bir yıla çıkın. Bu sırada includeSubDomains parametresini en sona bırakın. Sorun çıkarsa max-age=0 yazıp beklemek yeterlidir, çünkü kısa süre zaten hızlıca dolar.

Yeni sertifika kurulumu veya yenilemesi yaparken de bu bağımlılığı unutmayın; sertifika süresini takip etmek HSTS açık bir sitede opsiyonel değil zorunludur.

Özetle

  • HSTS, HTTPS yönlendirmesindeki ilk şifresiz isteği ortadan kaldırır ve SSL stripping saldırısını engeller.
  • Başlık yalnızca HTTPS yanıtlarında etkilidir; HTTP yanıtına eklemek işe yaramaz.
  • includeSubDomains eklemeden önce her alt alan adının geçerli sertifikası olduğunu doğrulayın.
  • Preload listesine girmek pratikte geri alınamaz; kararı en son ve emin olduğunuzda verin.
  • max-age değerini 5 dakikadan başlatıp kademeli artırın, sorun çıkarsa max-age=0 ile iptal edin.

Bunlar da ilginizi çekebilir