HSTS (HTTP Strict Transport Security), uyumlu tarayıcıya belirli bir alan adıyla yalnız güvenli HTTPS bağlantısı kurmasını söyleyen tarayıcı politikasıdır. Web istek ve yanıtlarını taşıyan HTTP, TLS ile korunduğunda HTTPS olarak adlandırılır. Sunucu HSTS politikasını geçerli HTTPS bağlantısındaki Strict-Transport-Security yanıt başlığıyla bildirir.

Tarayıcı başlığı hata içermeyen bir TLS bağlantısı üzerinden aldığında alan adını HSTS kapsamında kaydeder. Sonraki HTTP adreslerini ağ üzerinden güvensiz istek göndermeden önce HTTPS biçimine dönüştürür ve sertifika hatasında kullanıcının uyarıyı aşarak devam etmesine izin vermez.

HSTS, ilk bağlantıyı kendiliğinden güvenceye almaz, geçersiz sertifikayı düzeltmez ve HTTPS sunmayan bir hizmeti çalışır hale getirmez. max-age kayıt süresini, includeSubDomains alt alan kapsamını belirler. Yerleşik listeye ekleme anlamındaki preload ise standart HSTS’den ayrı, uzun vadeli ve geri alınması yavaş bir dağıtım kararıdır.

Strict-Transport-Security Başlığı Nasıl Çalışır?

Web sunucusu veya önündeki CDN, sertifika hatası olmayan bir HTTPS bağlantısındaki yanıta Strict-Transport-Security başlığını ekler. Tarayıcı başlığı işler, politikanın sona ereceği zamanı kaydeder ve sonraki isteklerde alan adının HSTS durumunu yerel kayıtlarından kontrol eder.

HTTP Adresini HTTPS'ye Dönüştürme

Kullanıcı daha sonra aynı alan adının HTTP adresini açarsa tarayıcı adres şemasını HTTPS olarak değiştirir. Bu işlem, sunucudan 301 veya 308 yönlendirme yanıtı bekleyen olağan HTTP yönlendirmesinden farklıdır; HSTS kaydı varsa güvensiz HTTP isteği gönderilmeden dönüşüm yapılır.

Sunucu tarafındaki HTTP'den HTTPS'ye yönlendirme yine önemlidir. HSTS politikasını desteklemeyen, politikayı henüz almamış veya kaydı sona ermiş istemciler ilk olarak HTTP uç noktasına ulaşabilir; yönlendirme bu ziyaretçileri güvenli adrese taşır.

Tarayıcı ile sunucu arasında çift yönlü iletişim kuran WebSocket bağlantıları da bu denetimden etkilenir. HSTS kapsamındaki bir alan adına yönelen şifresiz ws bağlantısı güvenli wss bağlantısına yükseltilebilir; hedef hizmetin bu güvenli bağlantıyı desteklemesi gerekir.

Sertifika Hatasında Bağlantıyı Durdurma

Bilinen bir HSTS alan adında TLS sertifikasının süresi dolmuşsa, alan adı sertifikayla eşleşmiyorsa veya güven zinciri doğrulanamıyorsa tarayıcı güvenli bağlantıyı tamamlamaz. HSTS, hatalı sertifikayı geçerli saymaz ve kullanıcıların güvenlik uyarısını görmezden gelerek devam etmesini engeller.

Bu nedenle HSTS'yi etkinleştirmeden önce sertifikanın gerekli alan adlarını kapsadığını, sunucunun ara sertifikaları eksiksiz gönderdiğini ve otomatik yenilemenin çalıştığını doğrulayın. Tarayıcı HSTS politikasını uyguladığı sürece ziyaretçi sertifika uyarısını aşamaz; arıza giderilene kadar siteye erişemez.

HSTS Başlığında Süre ve Alt Alan Kapsamı

Başlığın davranışını esas olarak max-age ve isteğe bağlı includeSubDomains belirler. Preload ise tarayıcının politikayı ilk bağlantıdan önce bilmesini amaçlayan ayrı bir dağıtım yaklaşımıdır.

max-age ile Politika Süresi

max-age, tarayıcının HSTS politikasını alan adı için kaç saniye boyunca uygulayacağını belirtir. Tarayıcı geçerli başlığı her yeniden aldığında süreyi alınan değere göre günceller; aynı pozitif max-age değerini taşıyan sonraki yanıtlar sona erme zamanını ileri taşır.

Değerin sıfır olması, dinamik olarak kaydedilmiş HSTS politikasının kaldırılmasını bildirir. Ancak bu kaldırma başlığının da geçerli bir HTTPS bağlantısı üzerinden tarayıcıya ulaşması gerekir; HTTPS tamamen bozulmuşsa tarayıcı yeni talimatı alamayabilir. max-age=0 yalnız aynı alan adının dinamik kaydını kaldırır; üst alan adından miras alınan includeSubDomains politikasını veya yerleşik preload kaydını sona erdirmez.

includeSubDomains ile Alt Alanların Korunması

includeSubDomains, politikayı başlığı gönderen alan adının alt alan adlarına genişletir. Örneğin ana alan adında etkinleştirildiğinde yönetim paneli, API, eski uygulama veya üçüncü taraf hizmete yönlenen alt alan adları da HTTPS kullanmak zorunda kalabilir.

Bu direktifi eklemeden önce mevcut alt alan adlarındaki web hizmetlerinin geçerli sertifikayla HTTPS sunabildiğini doğrulamak gerekir. Gelecekte eklenecek web hizmetleri de aynı kapsama girecektir. Unutulmuş bir alt alan adı veya yalnız HTTP çalışan eski bir servis, tarayıcı tarafından HTTPS'ye çevrildiği için erişilemez hale gelebilir.

Dinamik HSTS İlk HTTP İsteğini Neden Koruyamaz?

Standart HSTS politikası tarayıcıya ancak geçerli sertifikayla kurulan bir HTTPS bağlantısından sonra öğretilebilir. Kullanıcı alan adını ilk kez açık bir HTTP adresiyle ziyaret ederse ve tarayıcıda önceden kayıt ya da preload bilgisi yoksa, ilk istek HSTS tarafından korunmaz.

Bu aşamada sunucunun HTTPS yönlendirmesi devreye girer; ancak yönlendirme yanıtı istemciye ulaşmadan önce ağdaki bir saldırgan HTTP trafiğini değiştirebilir. Bu risk MITM (Man-in-the-Middle) saldırısı olarak bilinen tehdit modelinin bir parçasıdır. HSTS, politika öğrenildikten sonraki ziyaretleri korur; preload yaklaşımı ise ilk bağlantıdaki korunmasız dönemi azaltmayı amaçlar.

HSTS Preload Başvurusu ve Listeden Çıkma

Preload, alan adının tarayıcının yerleşik HSTS listesinde bulunmasıdır. Tarayıcı bu kayıt sayesinde siteyi daha önce ziyaret etmemiş olsa bile ilk bağlantıda HTTPS zorlaması uygulayabilir. Listeden çıkarma değişikliğinin kullanıcıların tarayıcılarına ulaşması aylar sürebileceği için bu karar hızlıca geri alınamaz.

preload direktifini başlığa yazmak alan adını kendiliğinden yerleşik listeye eklemez; ayrıca resmi başvuru yapılmalıdır. Chrome listesinin hstspreload.org üzerindeki kabul koşulları geçerli sertifika, 80 numaralı portta hizmet veriliyorsa aynı alan adında HTTP’den HTTPS’ye yönlendirme ve alt alanlardaki web hizmetlerinde HTTPS gerektirir. Temel alan adının HTTPS yanıtındaki HSTS başlığı en az 31.536.000 saniyelik max-age ile includeSubDomains ve preload direktiflerini taşımalıdır. HTTPS üzerindeki ek yönlendirme yanıtı da HSTS başlığını taşımalıdır.

Preload kapsamı, herkese açık olmayan iç alt alan adları dahil bütün alt alan adlarını etkiler. hstspreload.org, HSTS kullanımını önerirken preload kullanımını genel bir öneri olarak sunmaz. Modern tarayıcılar zaten birçok HTTP ziyaretini otomatik olarak HTTPS’ye yükseltir; preload daha çok bu yükseltmeyi engelleyen etkin ağ saldırılarına karşı ek koruma sağlar. Yanlış kapsam seçilirse alt alan adları erişilemez kalabilir ve listeden çıkma uzun sürebilir. Yalnız tehdit modeli ilk bağlantının önceden korunmasını gerçekten gerektiriyorsa ve alan adı yapısının kalıcı olarak HTTPS’de tutulacağı kesinleşmişse değerlendirilmelidir.

Listeden çıkmak için site yöneticisi önce HSTS başlığındaki preload direktifini kaldırır, ardından hstspreload.org üzerindeki çıkarma formuna başvurur. Başlık değişikliği tek başına tarayıcının yerleşik kaydını silmez. Listeden çıkarılma da tarayıcının HTTPS yanıtlarından ayrıca öğrendiği dinamik HSTS politikasını kendiliğinden kaldırmaz.

HSTS ile HTTP Yönlendirmesi Arasındaki Farklar

HTTP yönlendirmesi bir sunucu yanıtıdır. Tarayıcı önce HTTP isteğini gönderir, ardından 301 veya 308 gibi bir 3xx durum kodu taşıyan yanıtın Location başlığına göre HTTPS adresine gider. HSTS ise tarayıcının yerel güvenlik kararıdır; bilinen alan adında HTTP isteği gönderilmeden önce adres HTTPS’ye dönüştürülür.

Sunucu yönlendirmesi, siteye ilk kez gelen veya HSTS uygulamayan istemciler için yine gereklidir. HSTS ve preload bu yönlendirmeyi tamamlar; hiçbiri geçerli sertifika, çalışan HTTPS hizmeti ve doğru alan adı kapsamının yerine geçmez.

Karşılaştırma KonusuHTTP YönlendirmesiDinamik HSTSHSTS Preload
Kararı verenSunucu, CDN veya sunucu adına bağlantıyı karşılayan ters proxyBaşlığı daha önce alan tarayıcıYerleşik listeyi taşıyan tarayıcı
İlk HTTP isteğiÖnbellekte yönlendirme yoksa sunucuya ulaşırPolitika önceden öğrenilmediyse ulaşabilirListe güncelse HTTPS’ye çevrilir
Sunucu yanıtı gereksinimiYönlendirme yanıtı gerekir; önbellekteki yanıt yeniden kullanılabilirÖğrenildikten sonra süre dolana kadar gerekmezListe istemcide bulunduğu için ilk dönüşümde gerekmez
Sertifika hatasıHTTPS aşamasında normal istemci politikası uygulanırBağlantı durur ve uyarıyı aşma yolu sunulmazBağlantı durur ve uyarıyı aşma yolu sunulmaz
KapsamYönlendirmenin tanımlandığı isteklerAlan adı ve seçildiyse alt alan adlarıTemel alan adı ile bütün alt alan adları
Geri almaYeni yanıtlar sunucu ayarıyla değişir; önbellekteki kalıcı yönlendirmeler sürebilirmax-age=0 başlığının istemciye ulaşması gerekirAyrı çıkarma başvurusu ve tarayıcı güncellemeleri gerekir

HSTS Başlığı Nerede ve Hangi Yanıtlarda Gönderilmeli?

HSTS başlığı ziyaretçiye HTTPS yanıtını veren son katmanda tutarlı biçimde üretilmelidir. Bu katman web sunucusu, ters proxy veya CDN olabilir. Aynı yanıtta birden fazla HSTS başlığı göndermekten ve katmanlar arasında farklı max-age değerleri üretmekten kaçının; uyumlu tarayıcı birden fazla başlık görürse yalnız ilkini işler.

Başlık şifrelenmemiş HTTP yanıtında gönderilirse tarayıcı tarafından yok sayılır; sayfanın HTML kodundaki meta http-equiv öğesi de HSTS politikası oluşturmaz. Başlığı temel sayfa yanında HTTPS yönlendirmeleri, hata yanıtları ve farklı uç noktalar üzerinde denetleyin. CDN önbelleği veya kural önceliği nedeniyle bazı yanıtların farklı politika taşıması, ziyaretçilerin birbirinden farklı sürelerle HSTS kaydetmesine yol açabilir.

Tarayıcının geliştirici araçlarındaki Ağ bölümünde sayfanın HTTPS isteğini seçip yanıt başlıklarında Strict-Transport-Security değerini inceleyebilirsiniz. Bu değer, o yanıtın politikasını gösterir; tarayıcının önceki ziyaretlerden sakladığı kayıt veya preload listesi hakkında tek başına bilgi vermez.

Hatalı HSTS Yapılandırması Siteye Erişimi Nasıl Engeller?

HSTS tarayıcı tarafında süreli olarak saklandığı için yanlış bir politika sunucudaki başlık kaldırıldıktan sonra da bazı ziyaretçilerde etkisini sürdürebilir. Başlıca riskler şunlardır:

  • Gereğinden uzun max-age: HTTPS veya sertifika yönetimi henüz kararlı değilken uzun süre seçilmesi, geri dönüşü zorlaştırabilir.
  • Hazır olmayan alt alan adları: includeSubDomains, yalnız HTTP çalışan servisleri erişilemez hale getirebilir.
  • Sertifika yenileme hatası: HSTS geçersiz sertifikayı onarmadığı için ziyaretçiler bağlantıyı sürdüremez.
  • Erken preload kararı: Alan adı ve tüm alt alan yapısı kalıcı HTTPS kullanımına hazır değilse politikayı geri alma değişikliğinin tarayıcı sürümlerine yayılması uzun sürebilir.

HSTS Hangi Güvenlik Sorunlarını Çözmez?

Politika ilk ziyarette önceden bilinmiyorsa o ilk HTTP isteğini korumaz; alan adını IP adresine eşleyen DNS’nin kayıtlarını doğrulamaz, kimlik avını, kötü amaçlı yazılımı, sunucu açığını veya yanlış yetkilendirmeyi önlemez. HTTPS sayfasındaki şifresiz kaynak yüklemeleri anlamına gelen karma içeriği her durumda düzeltmez. Çerezlerin yalnız güvenli bağlantıyla gönderilmesini isteyen Secure niteliğini kendiliğinden eklemez ve geçerli sertifika ile otomatik yenilemenin yerine geçmez. HSTS’nin etkin olması, diğer güvenlik başlıklarının ya da uygulama kontrollerinin doğru yapılandırıldığını da kanıtlamaz.

HSTS Politikası Aşamalı Olarak Nasıl Uygulanır?

HSTS’yi etkinleştireceğiniz alan adında HTTPS ve otomatik sertifika yenilemesi çalışmalıdır. includeSubDomains eklemeden önce www, API’ler, yönetim panelleri, eski servisler ve üçüncü taraflara yönlenen alt alan adlarını belirleyip web hizmetlerinin HTTPS desteğini denetleyin. Yüksek bir max-age değeri tek başına güvenli politika oluşturmaz; talimat bütün alan adı yapısında sürdürülebilir olmalıdır.

İlk aşamada temel alan adında kısa ve kontrollü bir max-age uygulanabilir. Dışarıdan başlık, yönlendirme, sertifika ve hata yanıtları izlendikten sonra süre kademeli artırılabilir; bütün alt alan adları hazır olduğunda includeSubDomains ayrıca değerlendirilebilir. Preload varsayılan son adım değildir: yalnız kalıcı kapsam ve açık ilk-bağlantı gereksinimi varsa ayrı kararla başvurulmalıdır.

Her dağıtımdan sonra farklı tarayıcı profillerinden HTTP yükseltmesi, sertifika yenilemesi, CDN ve kaynak sunucu yanıtları doğrulanmalıdır. Başlığı kaldırmak önceden kaydedilmiş politikaları silmez. Site yöneticisi sertifika süresi dolmadan uyarı veren ve HTTPS erişim hatalarını bildiren izleme kurmalıdır.