HTTPS'e geçtikten sonra sayfalarda "mixed content" uyarısı çıkıyor; nasıl çözerim?
Kısa cevap
Uyarı, HTTPS sayfanın resim, script ya da stil gibi kaynakları http:// ile istemesinden kaynaklanır; çoğu zaman uygulama, TLS TR7'de sonlandığı için isteğin HTTPS olduğunu bilmez ve bağlantıları http:// ile üretir. Kalıcı çözüm, X-Forwarded-Proto: https başlığını Set HTTP Header aksiyonuyla Kurum Servisine iletip uygulamanın bu başlığı kullanmasını sağlamaktır. Uygulama değiştirilemiyorsa Add HTTP Header aksiyonuyla eklenen Content-Security-Policy: upgrade-insecure-requests başlığı tarayıcıya istekleri yükselttirir ya da Modify Response Content aksiyonu (Replace) yanıt gövdesindeki http:// adreslerini değiştirir.
Sorun: HTTPS Sayfada Güvensiz Kaynaklar
HTTPS'e geçişten sonra tarayıcılar, sayfanın http:// ile yüklediği kaynakları engeller ya da uyarı gösterir; kilit simgesi kaybolur, script ve stil dosyaları yüklenmediği için bazı işlevler çalışmaz. TLS TR7'de sonlandığında Kurum Servisi isteği düz HTTP olarak alır; uygulama kendi mutlak bağlantılarını ve yönlendirmelerini bu yüzden http:// ile üretmeye devam eder.
Çözüm: Üç Yöntem
Yöntem 1 sorunu kaynağında çözer; Yöntem 2 ve 3 uygulamaya dokunulamadığında kullanılır.
| Durumunuz | Uygun yöntem |
|---|---|
| Uygulama proxy başlıklarını okuyabiliyor (kalıcı çözüm) | Yöntem 1: X-Forwarded-Proto başlığı |
| Kaynaklar HTTPS ile de erişilebilir; tarayıcının istekleri yükseltmesi yeterli | Yöntem 2: CSP upgrade-insecure-requests |
Uygulama değiştirilemiyor; http:// adresleri yanıt gövdesinde sabit | Yöntem 3: Yanıt gövdesinde değiştirme |
Yöntem 1: X-Forwarded-Proto Başlığı Önerilen
- Nasıl çalışır TR7, TLS'i sonlandırdığı isteklere
X-Forwarded-Proto: httpsbaşlığını yazar; uygulama bu başlığa göre isteği HTTPS sayar ve bağlantılarınıhttps://ile üretir. - Nerede açılırLoad Balancer → Actions → Action Type = Set HTTP Header
- Gereksinim Uygulamanın proxy başlıklarını okuyacak şekilde yapılandırılması
- 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 Request seçilir. Header to Edit = X-Forwarded-Proto, Header Content = https yazılır (SSL offloading sonrası protokol bilgisi). Set HTTP Header, istemcinin gönderdiği aynı adlı başlığın yerine geçer.
Conditions alanında hazır If SSL is terminated koşulu seçilir; başlık yalnızca HTTPS isteklerine yazılı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. 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.
Uygulamada proxy başlıklarını okuma ayarı açılır; ayar yalnızca TR7'nin adresinden gelen isteklere güvenecek biçimde sınırlanır. Örnekler: Django'da SECURE_PROXY_SSL_HEADER, Express'te trust proxy, ASP.NET Core'da Forwarded Headers Middleware (XForwardedProto).
Doğrulama
Sayfa açılıp tarayıcı geliştirici araçlarının Console ve Network sekmelerine bakılır.
"Mixed Content" uyarısı yok · bütün alt kaynaklar https://Uygulama sunucusunun erişim logunda ya da paket yakalamada gelen isteğin başlıkları okunur.
Komut: tcpdump -A -nn -i any port 80 | grep -i x-forwarded-proto
X-Forwarded-Proto: httpsYöntem 2: CSP upgrade-insecure-requests
- Nasıl çalışır Yanıta eklenen
Content-Security-Policy: upgrade-insecure-requestsbaşlığı, tarayıcıya sayfadakihttp://isteklerini göndermeden öncehttps://yapmasını söyler. - Nerede açılırLoad Balancer → Actions → Action Type = Add HTTP Header
- Gereksinim Kaynakların HTTPS ile de erişilebilir olması
- 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 = Add HTTP Header, Execution Level = On Response seçilir. Header to Add = Content-Security-Policy, Header Content = upgrade-insecure-requests yazılır. Uygulama zaten bir Content-Security-Policy başlığı gönderiyorsa Add HTTP Header ikinci bir kopya ekler ve yanıtta çift politika oluşur.
Add tıklanır.
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 aksiyon seçilir.
Save tıklanır.
Doğrulama
Komut: curl -skI https://www.example.com/ | grep -i content-security-policy; ardından tarayıcı Console sekmesi kontrol edilir.
Content-Security-Policy: upgrade-insecure-requests · uyarı yokYöntem 3: Yanıt Gövdesinde Değiştirme
- Nasıl çalışır Yanıt gövdesindeki belirtilen metin (ör.
http://portal.example.com) yenisiyle (https://portal.example.com) değiştirilir. - Nerede açılırLoad Balancer → Actions → Action Type = Modify Response Content → Modify Type = Replace
- Gereksinim
http://adreslerinin yanıt gövdesinde (HTML) bulunması - 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 = Modify Response Content, Modify Type = Replace seçilir (Replace modu). Query Type varsayılan olarak RegEx'tir; düz metin için String seçilir. Mask Query = http://portal.example.com, New Content = https://portal.example.com yazılır.
Add tıklanır.
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 aksiyon seçilir.
Save tıklanır.
Doğrulama
Komut: curl -sk https://portal.example.com/ | grep -c "http://portal.example.com"
0 · tarayıcı Console'da uyarı yokSık Yapılan Hatalar
- HTTP → HTTPS yönlendirmesinin sorunu çözeceğini düşünmek. Yönlendirme sayfanın kendisini HTTPS'e taşır, sayfanın içindeki
http://kaynakları düzeltmez. - Başlığı ekleyip uygulamayı ayarlamamak. Uygulama
X-Forwarded-Protobaşlığını okumazsa bağlantılar değişmez. - Manage HTTP Security Headers aksiyonundaki CSP seçeneğini kullanmak. Bu seçenek sabit
default-src 'self'politikasını yazar; istekleri yükseltmez ve dış kaynakları da engelleyebilir. - Yanıt gövdesi değiştirmenin yan etkisini gözden kaçırmak. Aksiyon etkinken TR7, Kurum Servisinden sıkıştırılmış yanıt istemez; JavaScript ile çalışma anında üretilen bağlantılar da bu yolla düzelmez.
Dokümantasyonda nasıl yapılır
