HSTS (HTTP Strict Transport Security), sunucunuzun HTTPS yanıtlarına Strict-Transport-Security başlığını eklemesiyle etkinleşir. Güvenli geçiş için önce tüm siteyi ve alt alan adlarını HTTPS'e taşır, kısa bir max-age ile başlar, sorun görmezseniz değeri en az bir yıla (31536000 saniye) çıkarır ve koşulları sağlıyorsanız tarayıcı preload listesine başvurursunuz.

HSTS nedir ve neden önemlidir?

HSTS, RFC 6797 ile tanımlanmış bir mekanizmadır. Tarayıcı bu başlığı bir kez aldığında, belirtilen süre boyunca o alan adına yalnızca HTTPS ile bağlanır. Kullanıcı adres çubuğuna http:// yazsa veya eski bir bağlantıya tıklasa bile istek tarayıcı içinde HTTPS'e çevrilir.

Bu sayede:

  • Ortak Wi-Fi gibi güvenilmeyen ağlarda bağlantının şifresiz HTTP'ye düşürülmesi (SSL stripping) engellenir.
  • Sertifika hatalarında kullanıcı "yine de devam et" seçeneğiyle uyarıyı geçemez.
  • İlk HTTP isteğinin yarattığı küçük risk penceresi, preload ile tamamen kapanabilir.

Ön koşullar

HSTS etkinleştirildikten sonra HTTPS'te yaşanacak bir sorun, sitenin max-age süresi boyunca kullanıcılara erişilemez olmasına yol açar. Ön koşulları atlamayın.
  1. Geçerli ve otomatik yenilenen bir TLS sertifikanız olmalı.
  2. Tüm sayfalar HTTPS üzerinden sorunsuz çalışmalı; karışık içerik (mixed content) bulunmamalı.
  3. HTTP istekleri kalıcı (301) yönlendirmeyle HTTPS'e yönlendirilmeli.
  4. includeSubDomains kullanacaksanız tüm alt alan adları (ör. eski bir test sunucusu, e-posta web arayüzü) HTTPS desteklemeli.

Adım adım etkinleştirme

1. Kısa süreli deneme

İlk olarak beş dakikalık bir süreyle başlayın:

Strict-Transport-Security: max-age=300

Nginx'te:

add_header Strict-Transport-Security "max-age=300" always;

Apache'de:

Header always set Strict-Transport-Security "max-age=300"

2. Süreyi aşamalı artırın

Birkaç gün sorun yaşanmazsa değeri bir haftaya (604800), ardından bir aya (2592000) çıkarın. Her aşamada uygulama günlüklerini ve kullanıcı geri bildirimlerini izleyin.

3. Alt alan adlarını dahil edin

Tüm alt alan adlarının HTTPS ile çalıştığını doğruladıktan sonra:

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

4. Preload başvurusu (isteğe bağlı)

Preload listesi, tarayıcılara gömülü bir HSTS listesidir; siteye ilk kez gelen kullanıcıları da korur. hstspreload.org adresinde belirtilen başlıca koşullar şunlardır:

KoşulAçıklama
Geçerli sertifikaAlan adı geçerli bir sertifika sunmalı
HTTP → HTTPS yönlendirmeAynı ana makinede HTTP'den HTTPS'e yönlendirme yapılmalı
Tüm alt alan adları HTTPSÖzellikle www alt alan adı DNS'te varsa
max-ageEn az 31536000 saniye (1 yıl)
includeSubDomainsBaşlıkta bulunmalı
preloadBaşlıkta bulunmalı

Başlığın son hâli:

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
Preload listesinden çıkmak aylar sürebilir. Kurum içinde HTTPS desteklemeyen bir alt alan adı kalırsa bu adres kullanıcılar için erişilemez hâle gelir.

Geçiş öncesi kontrol listesi

HSTS'yi açmadan önce aşağıdaki maddeleri tek tek işaretleyin:

-DNS bölgenizdeki tüm alt alan adlarının listesini çıkardınız mı? Unutulmuş test, eski kampanya veya iç sistem alt alan adları en sık sorun kaynağıdır. -Her alt alan adı geçerli bir sertifikayla HTTPS üzerinden yanıt veriyor mu? -Sertifika yenileme otomatik mi ve süre sonu için uyarı tanımlı mı? -Sayfalarınızda HTTP ile yüklenen görsel, betik veya stil dosyası kaldı mı? -CDN veya yük dengeleyici kullanıyorsanız başlık hangi katmanda ekleniyor? Aynı başlığın iki kez gönderilmediğinden emin olun. -Değişikliği geri alma planınız hazır mı?

CDN kullanan sitelerde başlık değişikliğinden sonra CDN önbelleğini temizlemek, yeni başlığın tüm ziyaretçilere ulaşmasını hızlandırır. Ayrıca yalnızca ana sayfada değil, tüm yanıtlarda başlığın gönderildiğini birkaç farklı sayfa üzerinde kontrol edin.

HSTS yalnızca tarayıcılar için geçerlidir. Mobil uygulamalar ve API istemcileri kendi bağlantı kurallarına göre çalışır; bu istemcilerde de yalnızca HTTPS kullanıldığından ayrıca emin olun.

Sık yapılan hatalar

  • Başlığı HTTP yanıtına eklemek: Tarayıcılar HTTP üzerinden gelen HSTS başlığını yok sayar.
  • Doğrudan bir yıllık süreyle başlamak: Sorun çıkarsa geri dönüş zorlaşır.
  • Alt alan adlarını kontrol etmeden includeSubDomains: Unutulmuş bir iç sistem erişilemez olabilir.
  • Yönlendirme zincirleri: http://ornek.com adresinin önce https://ornek.com'a, sonra www sürümüne yönlenmesi preload koşulları için doğru sıralamadır; doğrudan http://www sürümüne yönlendirmek koşulu bozar.
  • Sertifika yenilemeyi ihmal etmek: HSTS etkinken süresi dolmuş sertifika, sitenin tamamen erişilemez olmasına yol açar.

Nasıl doğrularım?

HSTS kontrol aracımız başlığın varlığını, max-age değerini ve preload uygunluğunu denetler. Sertifikanızı SSL kontrol aracıyla, genel yapılandırmayı ise web sitesi güvenlik testi ile doğrulayabilirsiniz.

Sık sorulan sorular

HSTS başlığı HTTP yanıtında gönderilirse ne olur?

RFC 6797'ye göre tarayıcılar şifresiz HTTP üzerinden gelen HSTS başlığını yok sayar. Başlık yalnızca geçerli bir sertifikayla kurulmuş HTTPS bağlantısında gönderildiğinde dikkate alınır.

HSTS'yi geri almak mümkün mü?

Mümkündür ancak zaman alır. max-age=0 değeriyle başlık göndermek, siteyi yeniden ziyaret eden tarayıcılarda kaydı siler. Preload listesinden çıkmak ise tarayıcı sürümlerinin güncellenmesini gerektirdiği için aylar sürebilir.

Preload listesine girmek zorunlu mu?

Zorunlu değildir. Preload, siteye ilk kez giren kullanıcıları da korur; ancak tüm alt alan adlarının kalıcı olarak HTTPS desteklemesini gerektirdiği için ancak bu koşuldan emin olduğunuzda başvurmalısınız.

Sık sorulan sorular

HSTS başlığı HTTP yanıtında gönderilirse ne olur?

RFC 6797'ye göre tarayıcılar şifresiz HTTP üzerinden gelen HSTS başlığını yok sayar. Başlık yalnızca geçerli bir sertifikayla kurulmuş HTTPS bağlantısında gönderildiğinde dikkate alınır.

HSTS'yi geri almak mümkün mü?

Mümkündür ancak zaman alır. max-age=0 değeriyle başlık göndermek, siteyi yeniden ziyaret eden tarayıcılarda kaydı siler. Preload listesinden çıkmak ise tarayıcı sürümlerinin güncellenmesini gerektirdiği için aylar sürebilir.

Preload listesine girmek zorunlu mu?

Zorunlu değildir. Preload, siteye ilk kez giren kullanıcıları da korur; ancak tüm alt alan adlarının kalıcı olarak HTTPS desteklemesini gerektirdiği için ancak bu koşuldan emin olduğunuzda başvurmalısınız.

Kaynaklar

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

#hsts #https #tls #preload

İlgili içerikler