HTTP Strict Transport Security (HSTS)

Burp proxy ile araya girip siteme girdiğimde tarayıcım tarafından aşağıdaki gibi bir uyarı alıyorum. Bu yazımızda bu uyarılardan biri olan HTTP Strict Transport Security (HSTS) ‘den bahsedeceğiz.

HSTS, TLS protokolü için tasarlanmış bir mekanizma ve modern tüm tarayıcılar tarafından da bu güvenlik mekanizması desteklenmektedir. Aşağıdaki gokhankesici.com örneğinde web sitem https olması sebebiyle tarayıcıya açık bir şekilde haberleşilen http ile giriş yapılsa dahi iletişimin https üzerinden gitmesini tarayıcıya bildiriyor. Tarayıcı da bu özelliği desteklediğinden kullanıcıyı https üzerinden gitmesini zorluyor. Bu şekilde istemci tarafında siteniz kullanıcılarınızla olan iletişiminizi şifreli haberleştirmiş olursunuz. Böylece kullanıcınızla aranıza giren kimselerin bu haberleşmeyi okuyabilmesinin önüne de geçmiş olursunuz.Kullanıcı araya giren kişi sertifikayı imzalayan CA’yi sertifika otorite demediği sürece tarayıcıdan http üzerinden gidemeyecektir. Tarayıcı tarafından kullanıcının sertifikaya güven demesinin önüne geçilmiş olunur.

ex4 - HTTP Strict Transport Security (HSTS)

hsts - HTTP Strict Transport Security (HSTS)

Sunucu tarafında HSTS başlık bilgisi istemciye gönderilmiyorsa https ‘i de destekleyen bir sitede HSTS özelliği bulunamadığından bu siteye https gitmek zorunlu olmadığından http ile gidilebildiği anlamını taşır. Örneğin garanti.com.tr bu yazıyı yazdığım tarih itibariyle ana sayfasında bu özelliği aktif etmediğinden hem http hem de https üzerinden ulaşılabilmektedir. Araya giren herhangi bir kimse https ile giden birini http ‘ye yönlendirebilirdi. Eğer HSTS aktif olsaydı araya giren kişi kullanıcı tarafından sertifika tanınmadan veya sertifika otorite olarak kullanıcı bilgisayarında bulunmadığı sürece http üzerinden gidemeyecekti. HSTS olmadığından kullanıcı artık tarayıcıdan exception (istisna) olarakta sertifikaya güven diyebilir.

grnt2 - HTTP Strict Transport Security (HSTS)

ex3 - HTTP Strict Transport Security (HSTS)

grnt - HTTP Strict Transport Security (HSTS)

ex5 - HTTP Strict Transport Security (HSTS)

Eğer kullanıcınızı HTTPS ile girdirmeye zorlamak ve şifreli bir şekilde haberleştirmek istiyorsanız bu başlık bilgisini sunucunuzu yapılandırarak başlık bilgisi içerisine ekleyebilirsiniz.

Örneğin Apache sunucusunda ilgili virtual host’a gelen isteklerde cevap olarak Strict-Transport-Security başlığını set ederek ekleyebilirsiniz.

Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

Sonuç olarak isteklerinize karşılık cevaplarda bu başlık yer alır. includeSubdomains flagi bu başlığın tüm subdomain’ler için geçerliliğini belirtiyor.

7 - HTTP Strict Transport Security (HSTS)

Burada yer alan max-age flagi ise ne kadar süre (saniye) bu başlığı istemci tarafında geçerli kılınacağı belirtiliyor. Örneğin bu süre gün cinsinden aşağıdaki gibidir. preload ise

ex7 - HTTP Strict Transport Security (HSTS)

Tarayıcılar kendi HSTS Preload listelerini oluşturuyor ve her zaman https ile açılmasını tarayıcıya sağlatabilirsiniz. Buraya kendi sayfanızı da eklemek için ise preload token’ının eklenmesi önemli. Bu listeye sitenizi buradan ekleyebilirsiniz.

9 - HTTP Strict Transport Security (HSTS)

Şuan listeye girmek için bekliyoruz. Ancak Chrome’a ait kaynak kodlarda eksisozluk’un preload olarak eklenmiş olduğunu görebilirsiniz.

5 - HTTP Strict Transport Security (HSTS)

Bir diğer bilinmesi gereken şey. Bazen https’e zorlamak için sunucu tarafında redirect işlemini gerçekleştirmekle yetinenler oluyor. Malesef bu çözüm yukarıdaki “Garanti” örneğindeki gibi tarayıcı tarafından exception girilebilmesini sağlıyor.