SSL sertifikası kurdunuz ve site HTTPS ile açılıyor. Ancak ziyaretçi adres çubuğuna ornek.com yazdığında tarayıcı önce HTTP üzerinden bağlanmayı dener. Bu ilk istek şifresizdir ve araya giren biri tarafından yakalanabilir.
Birinci katman: 301 yönlendirmesi
Tüm HTTP isteklerini kalıcı olarak HTTPS'e yönlendirin:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
nginx için: return 301 https://$host$request_uri;
301 kullanın, 302 değil. Kalıcı yönlendirme arama motorlarının HTTPS sürümünü kanonik kabul etmesini sağlar.
İkinci katman: HSTS
Yönlendirme tek başına yeterli değildir; çünkü yönlendirmenin kendisi de HTTP üzerinden gelir. HSTS başlığı, tarayıcıya "bundan sonra bu siteye hiçbir koşulda HTTP ile bağlanma" der:
Strict-Transport-Security: max-age=31536000; includeSubDomains
Bu başlığı bir kez gören tarayıcı, bir yıl boyunca adres çubuğuna http:// yazsanız bile doğrudan HTTPS ile bağlanır. SSL stripping saldırısı bu şekilde etkisiz hale gelir.
HSTS'i açarken dikkat
HSTS geri alınması zor bir karardır. max-age süresince tarayıcılar sitenize HTTP ile bağlanmayı reddeder. Sertifikanız kesintiye uğrarsa veya bir alt alan adında HTTPS yoksa o adres tamamen erişilemez hale gelir.
Güvenli yaklaşım: önce kısa bir süre (max-age=300) ile test edin, tüm alt alan adlarında HTTPS çalıştığını doğrulayın, sonra bir yıla çıkarın.
Üçüncü katman: preload
preload etiketi eklenip listeye kaydolursanız, tarayıcı sitenizi hiç ziyaret etmemiş olsa bile HTTPS zorunlu kabul eder. En güçlü korumadır ama listeden çıkmak aylar sürer; yalnızca yapılandırmanızdan tamamen emin olduğunuzda kullanın.
Yönlendirme zincirini kısa tutun
Yaygın bir hata, zinciri gereksiz uzatmaktır: http://ornek.com → https://ornek.com → https://www.ornek.com. Her adım mobilde yüzlerce milisaniye ekler. Doğrudan nihai adrese tek adımda yönlendirin.