HSTS (HTTP Strict Transport Security), bir web sitesinin tarayıcıya "bana belirli bir süre boyunca yalnızca HTTPS ile bağlan" talimatını verdiği bir güvenlik mekanizmasıdır. Sunucunun HTTPS yanıtlarına eklediği Strict-Transport-Security başlığıyla etkinleşir ve bağlantının şifresiz HTTP'ye düşürülmesini, kullanıcının sertifika uyarılarını geçmesini engeller.

HSTS hangi sorunu çözer?

HTTPS'e geçmiş bir site bile, kullanıcı adres çubuğuna yalnızca alan adını yazdığında veya eski bir http:// bağlantısına tıkladığında ilk isteği şifresiz HTTP ile alabilir. Sunucu bu isteği HTTPS'e yönlendirir, ancak ilk istek ve yönlendirme yanıtı şifresizdir.

Ortak Wi-Fi gibi güvenilmeyen bir ağda araya giren bir saldırgan bu ilk isteği yakalayıp kullanıcıyı şifresiz bir sürümde tutabilir. Bu tekniğe SSL stripping (HTTPS'i soyma) denir. HSTS, tarayıcının isteği hiç HTTP olarak göndermemesini sağlayarak bu riski ortadan kaldırır.

HSTS nasıl çalışır?

RFC 6797'de tanımlanan işleyiş şöyledir:

  1. Kullanıcı siteye HTTPS ile bağlanır.
  2. Sunucu yanıtla birlikte Strict-Transport-Security başlığını gönderir.
  3. Tarayıcı alan adını, max-age süresi boyunca "yalnızca HTTPS" listesine kaydeder.
  4. Bu süre içinde alan adına yapılacak tüm HTTP istekleri tarayıcı içinde otomatik olarak HTTPS'e çevrilir.
  5. Sertifika hatası oluşursa tarayıcı kullanıcının uyarıyı geçmesine izin vermez.
  6. Site her ziyaret edildiğinde süre yenilenir.

Başlığın yapısı

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
YönergeAnlamı
max-ageTarayıcının kuralı hatırlayacağı süre (saniye). Zorunludur.
includeSubDomainsKural tüm alt alan adlarına da uygulanır.
preloadAlan adının tarayıcı preload listesine eklenmeye hazır olduğunu belirtir. RFC 6797'nin parçası değildir; preload listesi koşuludur.
Tarayıcılar, şifresiz HTTP üzerinden gelen HSTS başlığını yok sayar. Başlık yalnızca geçerli sertifikalı bir HTTPS bağlantısında etkilidir.

HSTS preload listesi nedir?

Normal HSTS'nin bir zayıf noktası vardır: Tarayıcı siteyi ilk kez ziyaret ettiğinde başlığı henüz bilmez. Bu ilk ziyaret boşluğunu kapatmak için büyük tarayıcılar, kaynak kodlarına gömülü bir preload listesi kullanır. Listedeki alan adlarına ilk ziyarette bile yalnızca HTTPS ile bağlanılır.

hstspreload.org üzerinden başvuru yapılır ve başlıca koşullar şunlardır: geçerli sertifika, HTTP'den HTTPS'e yönlendirme, tüm alt alan adlarının HTTPS desteklemesi ve başlıkta en az max-age=31536000, includeSubDomains ve preload yönergeleri.

Faydaları ve riskleri

Faydaları:

  • Bağlantı düşürme (downgrade) ve SSL stripping saldırılarını engeller.
  • Kullanıcıların sahte veya hatalı sertifika uyarılarını geçmesini önler.
  • Karışık bağlantıları HTTPS'e zorlayarak çerezlerin şifresiz gönderilme riskini azaltır.

Riskleri:

  • HTTPS'te bir sorun yaşanırsa (ör. süresi dolmuş sertifika) site max-age süresi boyunca erişilemez hâle gelir.
  • includeSubDomains kullanıldığında HTTPS desteklemeyen alt alan adları kullanılamaz olur.
  • Preload listesinden çıkmak, tarayıcı güncellemelerine bağlı olduğundan aylar sürebilir.

Örnek senaryo: HSTS olan ve olmayan site

Aşağıdaki örnekte ornek.com.tr kurgusal bir alan adıdır.

HSTS yoksa: Kullanıcı bir kafedeki ortak Wi-Fi'ye bağlanır ve adres çubuğuna ornek.com.tr yazar. Tarayıcı ilk isteği http:// ile gönderir. Ağda araya giren biri bu isteği yakalayıp kullanıcıyı şifresiz bir kopyada tutabilir; kullanıcı adres çubuğundaki küçük farkı fark etmeyebilir.

HSTS varsa: Kullanıcı siteyi daha önce ziyaret etmişse tarayıcı alan adını "yalnızca HTTPS" listesinde tutar. Aynı adres yazıldığında istek ağa çıkmadan önce https:// olarak değiştirilir. Araya giren kişi geçerli bir sertifika sunamadığı için bağlantı kurulamaz ve tarayıcı kullanıcının uyarıyı geçmesine izin vermez.

Preload varsa: Kullanıcı siteyi hiç ziyaret etmemiş olsa bile tarayıcı alan adını gömülü listeden tanır; ilk istek de HTTPS ile gönderilir.

HSTS'yi tamamlayan katmanlar

HSTS tek başına bir web sitesini güvenli kılmaz. Geçerli ve otomatik yenilenen bir sertifika, güncel TLS sürümleri, HTTPS yönlendirmesi, karışık içeriğin temizlenmesi ve Content-Security-Policy gibi diğer güvenlik başlıklarıyla birlikte kullanıldığında anlam kazanır.

Sık yapılan hatalar

  • Başlığı HTTP yanıtına eklemek veya yalnızca ana sayfada göndermek.
  • Doğrudan uzun bir max-age ve preload ile başlamak.
  • Sertifika yenilemeyi otomatikleştirmeden HSTS'yi etkinleştirmek.
  • HSTS'yi HTTPS yönlendirmesinin yerine geçen bir şey sanmak; ikisi birlikte kullanılmalıdır.

Nasıl kontrol ederim?

HSTS kontrol aracımız başlığın varlığını, max-age değerini ve preload uygunluğunu gösterir. Sertifikayı SSL kontrol, diğer güvenlik başlıklarını HTTP güvenlik başlıkları aracıyla denetleyebilirsiniz. Etkinleştirme adımları için HSTS nasıl etkinleştirilir rehberimize bakın.

Sık sorulan sorular

HSTS ile HTTPS yönlendirmesi arasındaki fark nedir?

301 yönlendirmesi, ilk isteğin şifresiz HTTP ile sunucuya ulaşmasından sonra çalışır; bu ilk istek araya girmeye açıktır. HSTS ise tarayıcının isteği hiç HTTP olarak göndermemesini sağlar. İkisi birlikte kullanılmalıdır.

HSTS ilk ziyareti korur mu?

Normal HSTS ilk ziyareti korumaz, çünkü tarayıcı başlığı ancak ilk HTTPS yanıtından sonra öğrenir. Bu boşluğu kapatmak için alan adı, tarayıcılara gömülü olan HSTS preload listesine eklenebilir.

max-age için hangi değer önerilir?

Geçiş tamamlandıktan sonra en az bir yıl, yani 31536000 saniye önerilir; bu değer preload listesi için de asgari koşuldur. Geçişin başında ise sorunları güvenle görebilmek için kısa değerlerle başlanmalıdır.

Sık sorulan sorular

HSTS ile HTTPS yönlendirmesi arasındaki fark nedir?

301 yönlendirmesi, ilk isteğin şifresiz HTTP ile sunucuya ulaşmasından sonra çalışır; bu ilk istek araya girmeye açıktır. HSTS ise tarayıcının isteği hiç HTTP olarak göndermemesini sağlar. İkisi birlikte kullanılmalıdır.

HSTS ilk ziyareti korur mu?

Normal HSTS ilk ziyareti korumaz, çünkü tarayıcı başlığı ancak ilk HTTPS yanıtından sonra öğrenir. Bu boşluğu kapatmak için alan adı, tarayıcılara gömülü olan HSTS preload listesine eklenebilir.

max-age için hangi değer önerilir?

Geçiş tamamlandıktan sonra en az bir yıl, yani 31536000 saniye önerilir; bu değer preload listesi için de asgari koşuldur. Geçişin başında ise sorunları güvenle görebilmek için kısa değerlerle başlanmalıdır.

Kaynaklar

  1. RFC 6797 — HTTP Strict Transport Security (HSTS)
  2. MDN Web Docs — Strict-Transport-Security
  3. HSTS Preload List Submission

#hsts #https #tls #http-basliklari

İlgili içerikler