HSTS, yani HTTP Strict Transport Security, web sitelerinin HTTPS üzerinden güvenli bağlantı kurmasını zorunlu kılan bir güvenlik mekanizmasıdır.
HSTS, yani HTTP Strict Transport Security, web sitelerinin HTTPS üzerinden güvenli bağlantı kurmasını zorunlu kılan bir güvenlik mekanizmasıdır. Bu politika, tarayıcılara siteye yalnızca güvenli bağlantılarla erişmelerini emreder ve man-in-the-middle saldırılarını önler. Sunucuda HSTS’i aktif etmek, veri güvenliğini artırır ve modern web standartlarına uyumu sağlar. Bu makalede, HSTS’in nasıl yapılandırılacağını adım adım ele alacağız; Apache ve Nginx gibi popüler sunucu yazılımları için pratik talimatlar vereceğiz. Yapılandırma sırasında dikkat edilmesi gereken noktaları da açıklayarak, sorunsuz bir uygulama için rehberlik edeceğiz.
HSTS, HTTP yanıt başlıklarında Strict-Transport-Security direktifi ile tanımlanır. Temel syntax’ı Strict-Transport-Security: max-age=31536000; includeSubDomains; preload şeklindedir. Burada max-age, politikanın geçerlilik süresini saniye cinsinden belirtir; örneğin 31536000 değeri bir yılı temsil eder. includeSubDomains parametresi, alt alan adlarını da kapsar ve preload ise tarayıcıların önceden yükleme listesine eklenmesini sağlar. Bu parametreleri doğru ayarlamak, güvenlik seviyesini belirler.
Politika ilk kez HTTPS üzerinden gönderilmelidir, çünkü HTTP üzerinden iletilirse etkisiz kalır. Sunucu yapılandırmasında bu başlığı eklemek için sunucu yazılımının konfigürasyon dosyalarını düzenlemek gerekir. Aşağıdaki örnek, genel bir HSTS başlığını gösterir: Strict-Transport-Security: max-age=63072000; includeSubDomains; preload. Bu ayar, iki yıllık bir süreyi kapsar ve alt alanları dahil eder. Uygulama öncesi mevcut SSL/TLS sertifikalarınızın geçerli olduğundan emin olun, aksi takdirde site erişimi engellenebilir.
Bu temel yapı, sonraki yapılandırma adımlarının temelini oluşturur ve hatalı uygulamaları önler. Her değişiklik sonrası sunucuyu yeniden yükleyin ve tarayıcıyı temizleyerek test edin.
Apache’de HSTS’i etkinleştirmek için httpd.conf veya VirtualHost dosyalarını düzenleyin. Header modülünün etkin olması şarttır; mod_headers’i yükleyin: sudo a2enmod headers. Ardından VirtualHost bloğuna şu satırı ekleyin: Header always set Strict-Transport-Security “max-age=31536000; includeSubDomains”. Bu, tüm HTTPS isteklerinde başlığı zorlar. .htaccess dosyası üzerinden de yapılabilir, özellikle paylaşımlı hostinglerde: Header always set Strict-Transport-Security “max-age=31536000; includeSubDomains; preload”.
Apache’in sites-available dizinindeki konfigürasyon dosyasını açın, örneğin 000-default.conf. <VirtualHost *:443> bloğunun içine Header direktifini yerleştirin. Tam örnek: <IfModule mod_headers.c> Header always set Strict-Transport-Security “max-age=63072000; includeSubDomains” </IfModule>. Değişiklikleri kaydettikten sonra sudo apache2ctl configtest ile syntax kontrolü yapın, sorun yoksa sudo systemctl reload apache2 ile uygulayın. Bu yöntem, sunucu genelinde tutarlılık sağlar ve performans kaybı minimumdur.
Paylaşımlı ortamlarda root erişimi yoksa .htaccess kullanın. Dosyaya şu satırları ekleyin: <IfModule mod_headers.c> Header set Strict-Transport-Security “max-age=31536000” </IfModule>. Preload için includeSubDomains ekleyin. Değişiklik sonrası tarayıcı önbelleğini temizleyin ve curl -I https://alanadiniz.com ile başlığı doğrulayın. Bu yaklaşım, hızlı testler için idealdir ancak production’da VirtualHost tercih edin, çünkü .htaccess her istekte ekstra işlem yükü getirir. Yaklaşık 70-100ms gecikme yaratabilir yoğun trafikte.
Apache yapılandırması tamamlandıktan sonra, HSTS’in etkinliğini securityheaders.com gibi araçlarla test edin. Hatalı max-age değerleri tarayıcıyı kilitleyebileceğinden, başlangıçta kısa süreler kullanın ve logları izleyin.
Nginx’te HSTS, server bloğu içinde add_header direktifiyle eklenir. nginx.conf veya sites-enabled dosyalarını düzenleyin. HTTPS server bloğuna şu satırı koyun: add_header Strict-Transport-Security “max-age=31536000; includeSubDomains; preload” always;. always parametresi, hata sayfalarında bile başlığın gönderilmesini sağlar. Modüllerin yüklü olduğundan emin olun; standart kurulumda headers desteklenir.
/etc/nginx/sites-available/default dosyasını açın. server { listen 443 ssl; … add_header Strict-Transport-Security “max-age=63072000; includeSubDomains” always; } bloğunu ekleyin. Syntax testi için sudo nginx -t çalıştırın, başarılıysa sudo systemctl reload nginx. Bu konfigürasyon, tüm HTTPS trafiğini kapsar ve alt alanlar için genişletilebilir. Preload listesine eklemek için önce includeSubDomains’i test edin; hatalı kullanım siteyi erişilemez kılar.
Uygulama sonrası curl -I https://site.com | grep Strict-Transport-Security ile kontrol edin. Tarayıcı geliştirici araçlarında Network sekmesinde başlığı inceleyin. HSTS preload durumunu hstspreload.org üzerinden sorgulayın, ancak göndermeden önce tam uyumu sağlayın. Nginx loglarında (access.log) 443 portu trafiğini izleyin; HTTP’den HTTPS’ye yönlendirme (return 301 https://$host$request_uri;) ile entegre edin. Bu adımlar, %100 etkinlik sağlar ve olası sorunları erken tespit eder. Performans etkisi ihmal edilebilir düzeydedir.
Nginx’in hafif yapısı sayesinde HSTS ek yük getirmez; milyonlarca istekte bile stabil kalır. Yapılandırmayı yedekleyin ve otomatik deployment’larda dahil edin.
Sunucuda HSTS’i aktif etmek, web uygulamanızın güvenliğini önemli ölçüde yükseltir. Apache ve Nginx için verdiğimiz adımları takip ederek, max-age’i kademeli artırın, alt alanları dikkatle yönetin ve düzenli testler yapın. Bu uygulama, PCI DSS gibi uyumluluk standartlarını karşılar ve kullanıcı verilerini korur. HSTS preload’a geçmeden önce kapsamlı doğrulama yapmayı unutmayın; böylece kesintisiz bir güvenlik katmanı elde edersiniz.