SSL Sertifika Analizi Açık Port Tespiti Web Uygulama Tarama DNS Güvenlik Denetimi HTTP Başlık Analizi Yanlış Yapılandırma Tespiti Yazılım Parmak İzi Alt Alan Adı Tarama
SSL Sertifika Analizi Açık Port Tespiti Web Uygulama Tarama DNS Güvenlik Denetimi HTTP Başlık Analizi Yanlış Yapılandırma Tespiti Yazılım Parmak İzi Alt Alan Adı Tarama

Tüm Rehberler

HTTP Strict Transport Security (HSTS), mevcut en etkili ancak sıklıkla yanlış yapılandırılan web güvenlik başlıklarından biridir. Bu rehber; HTTPS'yi tüm sitelerinde zorunlu kılmak ve kullanıcılarını protokol düşürme saldırılarından, SSL soyma (SSL stripping) ve çerez ele geçirmeden korumak isteyen geliştiriciler, DevOps mühendisleri ve teknik yöneticiler için hazırlanmıştır. Adımları sırasıyla takip edin — ileriye atlamak ziyaretçilerin sitenize erişimini kalıcı olarak engelleyebilir.

01

HSTS'yi Etkinleştirmeden Önce Tam HTTPS Kapsamını Sağlayın

HSTS, tarayıcılara sitenize düz HTTP üzerinden asla bağlanmamasını söyler. Sitenizin herhangi bir bölümü hâlâ HTTP'ye bağımlıysa — tek bir resim, komut dosyası veya yönlendirme bile olsa — HSTS'yi etkinleştirmek bu kaynakları dönen ziyaretçiler için kalıcı olarak bozabilir. Önce tüm karışık içerik sorunlarını çözün.

  • Etki alanınız ve kapsam altına almayı planladığınız tüm alt alan adları için güvenilir bir Sertifika Otoritesi'nden (CA) geçerli bir TLS/SSL sertifikası edinin ve kurun.
  • Web sunucunuzun tüm HTTP trafiğini (80. port) 301 kalıcı yönlendirme ile HTTPS'ye (443. port) yönlendirdiğinden emin olun.
  • Her sayfayı karışık içerik açısından denetleyin: tarayıcı geliştirici araçlarını açın, Konsol sekmesine gidin ve HTTPS sayfalarında güvensiz kaynakların yüklendiğine dair uyarıları arayın.
  • HTML, CSS, JavaScript ve veritabanı kayıtlarındaki tüm sabit kodlanmış http:// URL'lerini https:// veya protokol-bağımsız // URL'lere güncelleyin.
  • Üçüncü taraf yerleştirmelerin, yazı tiplerinin, analiz komut dosyalarının ve CDN varlıklarının tümünün HTTPS üzerinden yüklendiğini doğrulayın.
  • SSL sertifikanızın geçerli, süresi dolmamış ve tüm ana bilgisayar adlarını (www ve kullandığınız diğer alt alan adları dahil) kapsadığını onaylayın.
02

Strict-Transport-Security Başlığını Sunucunuza Ekleyin

HSTS politikası, Strict-Transport-Security HTTP yanıt başlığı aracılığıyla iletilir. Bu başlık yalnızca HTTPS üzerinden gönderilmelidir — tarayıcılar, HTTP üzerinden alınan başlığı yok sayar. Aşağıda en yaygın web sunucuları için yapılandırma örnekleri verilmiştir.

  • Apache: HTTPS <VirtualHost> bloğunuzun içine aşağıdakini ekleyin (mod_headers etkin olmalıdır):
    Header always set Strict-Transport-Security "max-age=300"
  • Nginx: HTTPS server bloğunuzun içine aşağıdakini ekleyin:
    add_header Strict-Transport-Security "max-age=300" always;
  • IIS: IIS Yöneticisi → HTTP Yanıt Başlıkları üzerinden Strict-Transport-Security adında bir özel HTTP yanıt başlığı ekleyin; değer olarak max-age=300 girin veya web.config dosyasını kullanın:
    <customHeaders><add name="Strict-Transport-Security" value="max-age=300" /></customHeaders>
  • Node.js / Express: helmet ara yazılımını kullanın: app.use(helmet.hsts({ maxAge: 300 }));
  • Caddy: Caddyfile'ınızda bir HTTPS sitesi yapılandırdığınızda HSTS otomatik olarak etkinleştirilir; ancak şu şekilde özelleştirebilirsiniz: header Strict-Transport-Security "max-age=300"
  • Dağıtımın ardından tarayıcınızın geliştirici araçlarını (Ağ sekmesi → herhangi bir yanıt seçin → Başlıklar) kullanarak başlığın HTTPS yanıtlarında göründüğünü doğrulayın.
03

max-age Direktifini Kademeli Olarak Yapılandırın

max-age değeri (saniye cinsinden), tarayıcılara HSTS politikasını ne kadar süre hatırlayacaklarını söyler. Test sırasında düşük bir değerle başlayın; böylece yanlış yapılandırmalardan kolayca kurtulabilirsiniz. Kendinizden emin olduğunuzda, üretim için önerilen değere çıkarın. Şunu unutmayın: bir tarayıcı uzun bir max-age değerini önbelleğe aldığında, başlığı daha sonra kaldırsanız bile bu süre boyunca HTTPS'yi zorunlu kılacaktır.

  • Hazırlık ortamında hiçbir şeyi bozmadan başlığın çalıştığını doğrulamak için max-age=300 (5 dakika) ile başlayın.
  • Hazırlık doğrulamasının ardından, olası kullanıcı sorunlarını izlemek için max-age=86400 (1 gün) ile üretim ortamına dağıtın.
  • Bir haftalık kararlı çalışmanın ardından max-age=2592000 (30 gün) değerine yükseltin.
  • Bir aylık sorunsuz çalışmanın ardından nihai üretim değerini max-age=31536000 (1 yıl) olarak ayarlayın — bu değer, HSTS ön yükleme listesine başvuru için zorunludur.
  • HSTS önbelleklerinin ne zaman sona ereceğini ekibin bilmesi için mevcut max-age değerini ve bitiş tarihini güvenlik çalışma kitabınıza belgeleyin.
04

includeSubDomains Direktifi ile Korumayı Genişletin

Varsayılan olarak HSTS yalnızca başlığı gönderen tam etki alanını korur. includeSubDomains eklemek, politikayı her alt alan adına genişletir (örn. api.example.com, mail.example.com). Bu direktifi, her alt alan adı geçerli HTTPS sunana kadar eklemeyin — hâlâ HTTP üzerinde olan herhangi bir alt alan adı, politikayı önbelleğe almış tarayıcılara sahip kullanıcılar için tamamen erişilemez hale gelir.

  • Tüm alt alan adlarını (dahili, API, e-posta veya hazırlık amaçlı kullanılanlar dahil) listeleyin ve her birinin geçerli bir HTTPS sertifikasına sahip olduğunu doğrulayın.
  • Yalnızca HTTP kullanan alt alan adlarını HTTPS'ye yönlendirin ya da hizmet dışı bırakın; ya da bunları HSTS kapsamında olmayan ayrı bir etki alanına taşıyın.
  • HSTS başlığınızı direktifi içerecek şekilde güncelleyin:
    Strict-Transport-Security: max-age=31536000; includeSubDomains
  • HTTPS'nin zorunlu kılındığını ve sertifika hatası görmediğinizi onaylamak için her alt alan adını bir tarayıcıda test edin.
05

preload Direktifini Etkinleştirin ve HSTS Ön Yükleme Listesi'ne Başvurun

Tarayıcı önbelleğindeki HSTS, kullanıcıları yalnızca ilk ziyaretlerinden sonra korur. HSTS Ön Yükleme Listesi, tarayıcı satıcıları (Chrome, Firefox, Safari, Edge) tarafından tutulan ve kullanıcının ilk isteğinde bile HTTPS'yi zorunlu kılan sabit kodlu bir listedir — böylece başlangıçtaki HTTP penceresi tamamen ortadan kalkar. Bu işlem kısa vadede geri alınamaz; bu nedenle yalnızca max-age ve includeSubDomains değerleriniz kararlı hale geldikten sonra devam edin.

  • HSTS başlığınızın üç bileşeni de içerdiğinden emin olun: max-age=31536000; includeSubDomains; preload.
  • max-age değerinizin en az 31536000 (1 yıl) olduğunu doğrulayın — bu, ön yükleme listesine uygunluk için zorunlu bir koşuldur.
  • hstspreload.org adresini ziyaret edin, etki alanınızı girin ve başvurmadan önce tüm uygunluk kontrollerini geçtiğini doğrulayın.
  • Etki alanınızı gönderin. Ön yükleme listesine dahil edilmenin birkaç hafta sürebileceğini ve listeyle birlikte gönderilen tüm tarayıcıları etkileyeceğini unutmayın.
  • Ön yükleme listesinden çıkarılmanın da yayılması birkaç haftayı bulur — başvurmadan önce bu durumu planlayın.
  • Başvurunun ardından, etki alanınızın durumunun "beklemede"den "ön yüklenmiş"e geçtiğini periyodik olarak hstspreload.org üzerinden izleyin.
06

HSTS Yapılandırmanızı Test Edin ve Doğrulayın

HSTS'yi doğrulama yapmadan dağıtmak risklidir. Başlığın doğru ayarlandığını, HTTPS yönlendirmelerinin çalıştığını ve karışık içerik kalmadığını teyit etmek için birden fazla yöntem kullanın. Sensagraph, sürekli güvenlik taramasının bir parçası olarak HSTS başlığının varlığını ve doğruluğunu otomatik olarak kontrol eder.

  • Sitenizi Chrome'da açın, F12 ile DevTools'u açın, sekmesine gidin, sayfayı yenileyin, herhangi bir isteğe tıklayın ve yanıt başlıklarında Strict-Transport-Security başlığının doğru değerle göründüğünü doğrulayın.
  • Chrome'da chrome://net-internals/#hsts adresine gidin, "HSTS/PKP alanını sorgula" alanına etki alanınızı girin ve beklenen politikayla listelendiğini onaylayın.
  • http://alanadi.com adresinin https://alanadi.com adresine 301 yanıtıyla (302 değil) yönlendirildiğini test edin.
  • Yanıt başlıklarını doğrudan incelemek için komut satırından curl -I https://alanadi.com komutunu çalıştırın.
  • Başlığın HTTP yanıtlarında bulunmadığını doğrulayın (yalnızca HTTPS'de görünmelidir).
  • Herhangi bir içerik güncellemesinin veya yeni üçüncü taraf entegrasyonunun ardından karışık içerik için yeniden kontrol edin.
  • Güvenlik başlıklarınız ve TLS yapılandırmanız hakkında bağımsız bir değerlendirme için securityheaders.com veya SSL Labs'ı kullanın.
07

İzleyin, Bakımını Yapın ve Sertifika Yenilemelerini Planlayın

HSTS, bir kez yapılandırılıp unutulabilecek bir kontrol değildir. HSTS uygulanırken TLS sertifikanızın süresi dolarsa, kullanıcılar siteden tamamen kilitlenir ve hatayı atlayacak hiçbir yol bulamazlar (normal bir sertifika uyarısının aksine, HSTS hataları "yine de devam et" seçeneğiyle geçilemez). Güçlü bir izleme sistemi kurmak hayati önem taşır.

  • Let's Encrypt ile Certbot, AWS Certificate Manager otomatik yenileme veya CA'nızın eşdeğerini kullanarak otomatik sertifika yenileme ayarlayın — ve yenilemeye güvenmeden önce otomatik yenilemenin gerçekten çalıştığını test edin.
  • TLS sertifika bitiş tarihinden en az 30 gün önce sizi bilgilendirecek uyarılar yapılandırın.
  • HSTS başlığı doğrulamasını çalışma sürenizi izleyen sisteminize veya CI/CD pipeline'ınıza ekleyin; böylece bir sunucu değişikliğinin ardından başlık kaybolursa hemen haberdar olursunuz.
  • Büyük altyapı değişikliklerinin ardından HSTS yapılandırmanızı gözden geçirin: sunucu göçleri, CDN değişiklikleri, yük dengeleyici güncellemeleri veya yeni alt alan adı dağıtımları.
  • HSTS başlık durumunu ve sertifika bitiş tarihlerini düzenli güvenlik inceleme döngünüze dahil edin. Sensagraph, HSTS başlığınızı sürekli olarak izler ve yanlış yapılandırmaları ya da gerilemelerini otomatik olarak bildirir.
  • Geri alma planınızı belgeleyin: max-age değerini düşürmenin veya başlığı kaldırmanın sonuçlarını ve önbelleğe alınmış politikaların kullanıcı tarayıcılarında sona ermesinin ne kadar süreceğini bilin.

Sıkça sorulan sorular

HSTS etkin durumdayken sitenizin herhangi bir bölümü HTTP üzerinden içerik sunmaya devam ederse, HSTS politikasını önbelleğe almış tarayıcılar bu kaynakların HTTP üzerinden yüklenmesini reddeder. Bu durum sayfaları bozabilir veya alt alan adlarını tamamen erişilemez kılabilir. HSTS'yi etkinleştirmeden önce her zaman %100 HTTPS kapsamını — includeSubDomains kullanıyorsanız tüm alt alan adları dahil — sağlayın.

Strict-Transport-Security başlığını sunucunuzdan istediğiniz zaman kaldırabilirsiniz; ancak politikayı önceden önbelleğe almış tarayıcılar, max-age süresi dolana kadar politikayı uygulamaya devam edecektir. Bir yıllık max-age belirlediyseniz, o dönemde sitenizi ziyaret eden kullanıcılar başlığı kaldırdıktan sonra bir yıla kadar HTTPS'ye yönlendirilmeye devam edecektir. Ön yükleme listesindeki alanlar için listeden çıkarılmanın tarayıcı güncellemelerine yayılması ek haftalar alır.

Standart 301 yönlendirme sunucu taraflıdır: tarayıcı başlangıçta bir HTTP isteği gönderir, sunucunuz bir yönlendirme yanıtı verir ve tarayıcı HTTPS'ye yönlendirilir. Bu ilk HTTP isteği, ortadaki adam saldırılarına karşı savunmasızdır. HSTS ise tarayıcı taraflıdır: önbelleğe alındıktan sonra tarayıcı başlangıçtaki HTTP isteğini hiç göndermez — herhangi bir ağ trafiği oluşmadan önce dahili olarak HTTPS'ye yükseltir.

Üretim siteleri için önerilen değer 31536000 saniyedir (bir yıl). Bu değer aynı zamanda HSTS ön yükleme listesine uygunluk için gereken asgari değerdir. İlk test ve yaygınlaştırma sırasında çok daha kısa bir değer (örn. 300 saniye / 5 dakika) kullanın; bu sayede kullanıcıları bozuk bir yapılandırmayla kitlemeden hızlıca değişiklik yapabilirsiniz.

HSTS özellikle protokol düşürme saldırılarına (saldırganın HTTP'yi zorlaması) ve HTTP üzerinden çerez ele geçirmeye karşı koruma sağlar. Tüm MITM saldırı vektörlerine karşı koruma sağlamaz — örneğin, zayıf şifre paketlerinin istismar edilmesi veya sertifika yanlış düzenlemesi gibi HTTPS bağlantısına yönelik saldırıları engellemez. Kapsamlı koruma için HSTS'yi güçlü bir TLS yapılandırması, Sertifika Şeffaflığı (Certificate Transparency) izlemesi ve diğer güvenlik başlıklarıyla birleştirin.

Bu ortamlar genellikle tam olarak geçerli HTTPS kurulumuna sahip olmadığından, geliştirme veya hazırlık ortamlarında uzun max-age değeriyle HSTS etkinleştirmemek en iyisidir. Üretim dışı bir ortamda HSTS'yi test etmeniz gerekiyorsa, çok kısa bir max-age (örn. 60–300 saniye) kullanın ve üretim dışı alan adlarında asla preload direktifini kullanmayın.

Evet. Sensagraph, web varlıklarınızın sürekli güvenlik taramasının bir parçası olarak Strict-Transport-Security başlığının varlığını ve doğruluğunu — max-age değeri, includeSubDomains direktifi ve preload uygunluğu dahil — otomatik olarak doğrular.