HSTS'i nasıl eklerim?
Kısa cevap
Önerilen yol, bir TLS Security Profile'da HSTS (Strict-Transport-Security header) anahtarını açıp HSTS Duration (max-age), Include Subdomains ve isteğe bağlı Browser Preload List Flag ayarlarını yapmak ve profili HTTP vService'in SSL Security modülünde seçmektir; başlık yalnızca HTTPS yanıtlarına eklenir. Alternatif olarak Manage HTTP Security Headers aksiyonu sabit bir HSTS değeri (max-age=16000000; includeSubDomains; preload;), Set HTTP Header aksiyonu ise istenen değeri ekler; vService'te aksiyon da varsa aksiyonun değeri geçerli olur. HSTS yalnızca HTTP vService'te çalışır.
Temel Bilgi
HSTS (HTTP Strict Transport Security, RFC 6797), sunucunun HTTPS yanıtına eklediği Strict-Transport-Security başlığıdır. Başlığı alan tarayıcı, max-age süresi boyunca o alan adına yalnızca HTTPS ile bağlanır; http:// bağlantıları istek gönderilmeden HTTPS'e çevrilir ve sertifika hatası kullanıcı tarafından geçilemez. includeSubDomains kuralı alt alan adlarına yayar; preload, alan adının tarayıcılara gömülü HSTS listesine (hstspreload.org) başvurusu için gereken işarettir.
Sorun: Tarayıcılar İlk İstekte Yine HTTP Deniyor
HTTP → HTTPS yönlendirmesi olsa bile tarayıcı her yeni ziyarette önce şifresiz bir istek gönderebilir; bu ilk istek araya girme saldırılarına açıktır. HSTS başlığı tarayıcıya siteye belirli bir süre boyunca yalnızca HTTPS ile bağlanmasını söyler. SSL Labs A+ notu için de geçerli bir HSTS başlığı gerekir (SSL Labs'ten A+ almak için neler yapmalıyım?).
Çözüm: Dört Yöntem
Yöntemler birbirinin alternatifidir; HSTS tek yerden yönetilir.
| Durumunuz | Uygun yöntem |
|---|---|
| Süreyi ve yönergeleri ayarlayarak, profil üzerinden | Yöntem 1: TLS Security Profile |
| Diğer güvenlik başlıklarıyla birlikte hazır sabit değer | Yöntem 2: Manage HTTP Security Headers |
| Tamamen özel değer ya da yalnızca belirli koşullarda | Yöntem 3: Set HTTP Header |
| Komut satırından | Yöntem 4: WEB-CLI |
Yöntem 1: TLS Security Profile Önerilen
- Nasıl çalışır Profil, HTTP vService'in TLS bağlantılarındaki yanıtlara
Strict-Transport-Security: max-age=<saniye>[; includeSubDomains][; preload]başlığını ekler. - Nerede açılırCertificates & PKI → TLS Security Profiles → Frontend-only Settings → HSTS (Strict-Transport-Security header)
- Gereksinim HTTP vService'te Encrypted (HTTPS) frontend ve sertifika
- vService tipi HTTP
Adım adım yapılandırma
Sol alttaki TR7 logosuyla Configuration Menu açılır; Certificates & PKI → TLS Security Profiles ekranında Add tıklanır (nasıl eklenir); vService'te kullanılan özel bir profil varsa o profil seçilip Edit tıklanır. Yeni profilde Security Profile Name girilir.
Frontend-only Settings bölümünde HSTS (Strict-Transport-Security header) anahtarı açılır (varsayılan kapalı).
HSTS Duration (max-age) varsayılan olarak 180 gündür; sayı ve birim (saat, gün, hafta, ay, yıl) olarak girilir, en az 1 saattir. Alt alan adları da kapsanacaksa Include Subdomains (includeSubDomains) açılır. Preload başvurusu yapılacaksa Browser Preload List Flag (preload) açılır; bu işaret yalnızca süre en az 1 yıl ve Include Subdomains açıkken kaydedilir, aksi hâlde form preload requires a max-age of at least 1 year and includeSubDomains hatası verir. Süre hesabında bir ay 30 gün sayıldığından 12 months yetmez; 1 years ya da 365 days seçilir.
Formun altındaki Add tıklanır (mevcut profilde Edit).
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit tıklanır.
Details panelinde Frontend Settings altındaki SSL Security kutusu işaretlenir ve profil seçilir (vService'te profil seçimi).
Save tıklanır. Cluster kurulumunda varsayılan auto-sync ile değişiklik eş cihaza da gönderilir; Manual Sync Mode açıksa eş cihaza elle gönderilir.
Doğrulama
HTTPS yanıtının başlıkları okunur; HTTP yanıtında başlık bulunmaz.
Komut: curl -skI https://www.example.com/ | grep -i strict-transport-security
Strict-Transport-Security: max-age=31536000; includeSubDomainsYöntem 2: Manage HTTP Security Headers
- Nasıl çalışır Aksiyonun Response Headers listesindeki Strict-Transport-Security (HSTS) seçeneği, TLS bağlantılarındaki yanıtlara sabit
max-age=16000000; includeSubDomains; preload;değerini yazar (yaklaşık 185 gün). Aksiyon koşulsuz çalışır; aynı listeden X-Frame-Options, X-Content-Type-Options gibi başlıklar da eklenebilir. - Nerede açılırLoad Balancer → Actions → Action Type = Manage HTTP Security Headers
- Gereksinim HTTP vService'te Encrypted (HTTPS) frontend
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Actions ekranında Add tıklanır (nasıl eklenir).
Action Name girilir; Action Type = Manage HTTP Security Headers seçilir. Response Headers listesinde Strict-Transport-Security (HSTS) işaretlenir. Formda koşul ve çalışma anı alanı yoktur; aksiyon her yanıtta çalışır.
Add tıklanır; aksiyon listeye eklenir.
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit tıklanır.
Details panelinde Modules altındaki Actions kutusu işaretlenir ve açılan alanda aksiyon seçilir.
Save tıklanır. Aksiyon vService'e eklenmedikçe çalışmaz.
Doğrulama
Komut: curl -skI https://www.example.com/ | grep -i strict-transport-security
Strict-Transport-Security: max-age=16000000; includeSubDomains; preload;Yöntem 3: Set HTTP Header
- Nasıl çalışır Yanıttaki
Strict-Transport-Securitybaşlığı istenen değerle tek başlık olarak yazılır; sunucunun kendi gönderdiği HSTS başlığının yerine geçer. Koşulla yalnızca HTTPS yanıtlarına ya da belirli yollara uygulanır. - Nerede açılırLoad Balancer → Actions → Action Type = Set HTTP Header
- Gereksinim HTTP vService'te Encrypted (HTTPS) frontend
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Actions ekranında Add tıklanır (nasıl eklenir).
Action Name girilir; Action Type = Set HTTP Header, Execution Level = On Response seçilir. Header to Edit = Strict-Transport-Security, Header Content = max-age=31536000; includeSubDomains yazılır.
Conditions alanında hazır If SSL is terminated koşulu seçilir; böylece başlık yalnızca HTTPS yanıtlarına eklenir.
Add tıklanır; aksiyon listeye eklenir.
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit tıklanır.
Details panelinde Modules altındaki Actions kutusu işaretlenir ve açılan alanda aksiyon seçilir.
Save tıklanır.
Doğrulama
HTTPS ve HTTP yanıtları ayrı ayrı okunur.
Komut: curl -skI https://www.example.com/ | grep -i strict-transport-security
HTTPS'te tek başlık · HTTP'de başlık yokYöntem 4: WEB-CLI
- Nasıl çalışır Profilin HSTS alanları ve vService ataması komut satırından yapılır.
- Nerede açılır TR7 WEB-CLI →
lb ssl-security update·lb service update - Gereksinim WEB-CLI erişimi; HTTP vService'te Encrypted (HTTPS) frontend
- vService tipi HTTP
Adım adım yapılandırma
<profil> yerine profil adı Tab ile seçilir (HSTS alanları):
lb ssl-security update id <profil> --hsts true --hstsMaxAge.val 1 --hstsMaxAge.unit y --hstsIncludeSubdomains true--sslSecurity vService'in profilini bu profille değiştirir:
lb service update id <vService> --sslSecurity <profil>Doğrulama
Komut: curl -skI https://www.example.com/ | grep -i strict-transport-security
Strict-Transport-Security: max-age=31536000; includeSubDomainsSık Yapılan Hatalar
- Profil ve aksiyonla HSTS'i birlikte eklemek. vService'te HSTS ekleyen bir aksiyon varsa aksiyonun değeri profilin değerinin yerine geçer; HSTS tek yerden yönetilir.
- Add HTTP Header aksiyonuyla HSTS eklemek. Bu aksiyon başlığı mevcut olanın yanına ekler; sunucu da HSTS gönderiyorsa yanıtta iki başlık oluşur. Özel değer için Set HTTP Header kullanılır.
- Manage HTTP Security Headers'daki sabit değerle preload başvurusu yapmak. Sabit süre (16.000.000 saniye, yaklaşık 185 gün) preload için gereken 1 yılın altındadır; preload için Yöntem 1 kullanılır.
- L7 TCP vService'te HSTS beklemek. HSTS bir HTTP başlığıdır; yalnızca HTTP vService'te eklenir.
- HSTS'i yönlendirmenin yerine koymak. İlk ziyaret için 80 portunda HTTP → HTTPS yönlendirmesi yine gerekir (HTTP'den HTTPS'e yönlendirmeyi nasıl yaparım?).
- Preload'u denemek için açmak. Preload listesine giren alan adı kolayca çıkarılamaz; bütün alt alan adlarının HTTPS'e hazır olduğu doğrulanmadan açılmaz.
Dokümantasyonda nasıl yapılır
