WEB / WEB-05.05
HTTPS ve TLS termination zinciri
Browser’daki HTTPS sonucu bir hop’u doğrular. Terminating CDN ve proxy yeni connections kurar; HSTS ve mixed content browser’ın farklı local policy’leridir.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Her hop TLS
- Başlangıç context’i
Seçilmiş başlangıç koşulları local state’tir; henüz bir message arrival veya application sonucu oluşmadı.
- Browser
- http URL; HSTS active; request unsent
- CDN
- Hop-A hazır; HTTP message henüz yok
- Reverse proxy
- Upstream için henüz request yok
- Application
- Request yok; application delivery none
- HSTS local rewrite
Browser’ın notes.example.org için aktif HSTS kaydı http URL’yi yerelde https yapar. Hop-A verification sonucu doğru olarak verilmiştir; GET /notes hazırdır fakat CDN’e henüz ulaşmamıştır.
- Browser
- GET /notes hazır; hop-A verification doğru
- CDN
- Hop-A hazır; HTTP message henüz yok
- Reverse proxy
- Upstream için henüz request yok
- Application
- Request yok; application delivery none
- HTTPS request CDN’de
Hop-A protected request CDN’e ulaştı. CDN bu hop’un TLS endpoint’idir; HTTP plaintext’ini kendi process’i içinde okuyabilir.
- Browser
- GET /notes hazır; hop-A verification doğru
- CDN
- GET /notes received; plaintext readable at CDN
- Reverse proxy
- Upstream için henüz request yok
- Application
- Request yok; application delivery none
- Yeni peer için gate
CDN, proxy.example.org için path, reference identity ve private-key proof kontrollerini başarılı olarak kullanır. Ayrı hop-B context’inde GET /notes hazırlar; reverse proxy henüz request’i almamıştır.
- Browser
- GET /notes hazır; hop-A verification doğru
- CDN
- Hop-B verified; GET /notes hazır
- Reverse proxy
- Upstream için henüz request yok
- Application
- Request yok; application delivery none
- Request proxy’ye ulaştı
Yeni hop-B context’indeki request reverse proxy’ye ulaştı; proxy kendi termination boundary’sinde plaintext okuyabilir.
- Browser
- GET /notes hazır; hop-A verification doğru
- CDN
- Hop-B verified; GET /notes hazır
- Reverse proxy
- GET /notes received; plaintext readable at proxy
- Application
- Request yok; application delivery none
- Application hop seçildi
Reverse proxy, app.example.org için ayrı TLS doğrulamasını başarılı olarak kullanır ve hop-C içinde GET /notes hazırlar. Browser hop’unun key’i bu connection’da kullanılmaz.
- Browser
- GET /notes hazır; hop-A verification doğru
- CDN
- Hop-B verified; GET /notes hazır
- Reverse proxy
- GET /notes hazır; hop-C TLS verified
- Application
- Request yok; application delivery none
- Request application’da
Normal GET /notes application’a ulaştı; selected transport hop-C HTTPS; user authorization ve response sonucu hâlâ gösterilmez.
- Browser
- GET /notes hazır; hop-A verification doğru
- CDN
- Hop-B verified; GET /notes hazır
- Reverse proxy
- GET /notes hazır; hop-C TLS verified
- Application
- Request received; transport=https; response none
HTTP upstream
- Başlangıç context’i
Seçilmiş başlangıç koşulları local state’tir; henüz bir message arrival veya application sonucu oluşmadı.
- Browser
- http URL; HSTS active; request unsent
- CDN
- Hop-A hazır; HTTP message henüz yok
- Reverse proxy
- Upstream için henüz request yok
- Application
- Request yok; application delivery none
- HSTS local rewrite
Browser’ın notes.example.org için aktif HSTS kaydı http URL’yi yerelde https yapar. Hop-A verification sonucu doğru olarak verilmiştir; GET /notes hazırdır fakat CDN’e henüz ulaşmamıştır.
- Browser
- GET /notes hazır; hop-A verification doğru
- CDN
- Hop-A hazır; HTTP message henüz yok
- Reverse proxy
- Upstream için henüz request yok
- Application
- Request yok; application delivery none
- HTTPS request CDN’de
Hop-A protected request CDN’e ulaştı. CDN bu hop’un TLS endpoint’idir; HTTP plaintext’ini kendi process’i içinde okuyabilir.
- Browser
- GET /notes hazır; hop-A verification doğru
- CDN
- GET /notes received; plaintext readable at CDN
- Reverse proxy
- Upstream için henüz request yok
- Application
- Request yok; application delivery none
- Yeni peer için gate
CDN, proxy.example.org için path, reference identity ve private-key proof kontrollerini başarılı olarak kullanır. Ayrı hop-B context’inde GET /notes hazırlar; reverse proxy henüz request’i almamıştır.
- Browser
- GET /notes hazır; hop-A verification doğru
- CDN
- Hop-B verified; GET /notes hazır
- Reverse proxy
- Upstream için henüz request yok
- Application
- Request yok; application delivery none
- Request proxy’ye ulaştı
Yeni hop-B context’indeki request reverse proxy’ye ulaştı; proxy kendi termination boundary’sinde plaintext okuyabilir.
- Browser
- GET /notes hazır; hop-A verification doğru
- CDN
- Hop-B verified; GET /notes hazır
- Reverse proxy
- GET /notes received; plaintext readable at proxy
- Application
- Request yok; application delivery none
- Application hop seçildi
Reverse proxy, son hop için HTTP plaintext seçer ve GET /notes hazırlar. Browser’ın HTTPS scheme’i değişmez; bu server-side hop bir browser mixed-content request’i değildir.
- Browser
- GET /notes hazır; hop-A verification doğru
- CDN
- Hop-B verified; GET /notes hazır
- Reverse proxy
- GET /notes hazır; hop-C HTTP, TLS yok
- Application
- Request yok; application delivery none
- Request application’da
Normal GET /notes application’a ulaştı; selected transport HTTP, TLS protection yok; user authorization ve response sonucu hâlâ gösterilmez.
- Browser
- GET /notes hazır; hop-A verification doğru
- CDN
- Hop-B verified; GET /notes hazır
- Reverse proxy
- GET /notes hazır; hop-C HTTP, TLS yok
- Application
- Request received; transport=http; response none
Upstream ad hatası
- Başlangıç context’i
Seçilmiş başlangıç koşulları local state’tir; henüz bir message arrival veya application sonucu oluşmadı.
- Browser
- http URL; HSTS active; request unsent
- CDN
- Hop-A hazır; HTTP message henüz yok
- Reverse proxy
- Upstream için henüz request yok
- Application
- Request yok; application delivery none
- Browser peer doğrulandı
Browser kendi notes.example.org TLS peer’ini valid seçer; bu sonuç next-hop proxy certificate’i için evidence değildir.
- Browser
- Hop-A verified; HTTPS request ready
- CDN
- Hop-A hazır; HTTP message henüz yok
- Reverse proxy
- Upstream için henüz request yok
- Application
- Request yok; application delivery none
- Request CDN’e ulaştı
Normal protected request CDN’e ulaştı; upstream request henüz reverse proxy’ye gönderilmedi.
- Browser
- Hop-A verified; HTTPS request ready
- CDN
- GET /notes received; upstream unsent
- Reverse proxy
- Upstream için henüz request yok
- Application
- Request yok; application delivery none
- Upstream name gate kapalı
Declared upstream path valid olsa bile hostname match false seçilmiştir; CDN message’i next hop’a göndermez.
- Browser
- Hop-A verified; HTTPS request ready
- CDN
- Upstream hostname=false; gate closed; forwarded=false
- Reverse proxy
- Upstream için henüz request yok
- Application
- Request yok; application delivery none
- Failure local kalır
Reverse proxy ve application receipt state’leri değişmedi; bu trace TLS handshake wire mesajlarını veya browser response’unu çizmez.
- Browser
- Hop-A verified; HTTPS request ready
- CDN
- Upstream verification failed; request stops at CDN
- Reverse proxy
- Upstream için henüz request yok
- Application
- Request yok; application delivery none
Script engellenir
- Başlangıç context’i
Seçilmiş başlangıç koşulları local state’tir; henüz bir message arrival veya application sonucu oluşmadı.
- Browser
- Secure document; http script; request unsent
- CDN
- Asset request yok; idle
- Reverse proxy
- Request yok; idle
- Application
- Request yok; idle
- Subresource context
Selected secure document http://assets.example.org/main.js script’ini ister; extra CSP upgrade ve prior asset HSTS policy yoktur.
- Browser
- Destination script; default mixed policy
- CDN
- Asset request yok; idle
- Reverse proxy
- Request yok; idle
- Application
- Request yok; idle
- Default block kararı
Script upgradeable image/audio/video category’sinde değildir; default secure-document profile local olarak request’i engeller.
- Browser
- Blocked; networkSent=false
- CDN
- Asset request yok; idle
- Reverse proxy
- Request yok; idle
- Application
- Request yok; idle
- Arrival oluşmadı
CDN ve sonraki actors idle kalır; burada server response, script receipt veya script execution sonucu üretilmez.
- Browser
- Mixed request stopped locally; response none
- CDN
- Asset request yok; idle
- Reverse proxy
- Request yok; idle
- Application
- Request yok; idle
ROLLER · STATE · VERİ AKIŞI
HTTPS hangi iki peer arasında?
Atlas Notları https://notes.example.org adresinden açılır. Browser’ın HTTPS kontrolü URL’deki service identity için karşısındaki TLS endpoint’i doğrular ve o bağlantının HTTP data’sını korur. Endpoint bir CDN olabilir; service adına yetkilendirilmiş CDN’in certificate’i doğrulanması backend application’ın aynı TLS connection’ın peer’i olduğunu göstermez. Origin authority ve fiziksel server programı aynı kavram değildir.
Örnekte browser → CDN → reverse proxy → application zinciri vardır. Her ok bağımsız bir connection’dır. CDN gelen connection’da server, sonraki connection’da client rolündedir; reverse proxy’de aynı rol değişimi tekrar eder. Certificate path, hostname reference, private-key proof ve traffic key kapsamı her hop için ayrı değerlendirilir. Browser’ın başarılı verification’ı yalnız kendi hop’unu doğrular.
Termination plaintext’i bir endpoint’e açar
TLS termination, gelen protected record’un endpoint’te doğrulanıp application-readable HTTP message’a dönüşmesidir. CDN, header ve body’yi burada okuyabilir; caching veya routing bu içerik üzerinde çalışır. TLS terminator’ın plaintext’e erişmesi integrity failure değildir, bu architecture’ın beklenen trust boundary’sidir. İçerik CDN’e açık olmamalıysa çözüm sadece ikinci TLS arrow çizmek olamaz; application confidentiality tasarımı ayrıca gerekir.
CDN sonraki hop’ta yeni TLS connection kurarsa önceki ciphertext’i kopyalayıp devam ettirmez. Yeni peer için certificate verification, yeni keying material ve yeni record context gerekir. Artifact three-hop ledger’da key alias’ları hop-A, hop-B ve hop-C olarak ayırır; bunlar gerçek key bytes değildir. Her TLS hop network üzerindeki data’yı kendi endpoints’i arasında korur; bütün terminating endpoints data’yı okuyabilir.
HTTP upstream seçimi browser’da görünmez
Normal case’te üç hop TLS kullanır. Plaintext-upstream case’inde son Reverse proxy → Application hop’u HTTP’dir; browser → CDN yine HTTPS kalır. Browser kendi resource fetch’inin https scheme’ini görür ve backend network segment’ini mixed content olarak değerlendirmez. Server-side HTTP hop için confidentiality ve peer authentication güvencesi TLS’den gelmez; “iç ağ” ifadesi bunu otomatik olarak sağlamaz.
Üçüncü branch’te CDN’in reverse proxy için seçtiği hostname reference ile presented certificate identity uyuşmaz. CDN kendi TLS-client verification gate’inde request’i upstream’e göndermez. Bu local failure’da reverse proxy’nin request-received state’i değişemez. Browser verification’ın daha önce başarılı olması bu gate’i aşmaz. Model seçili outcome’ları gösterir; gerçek DNS, certificate bytes ve TLS negotiation yürütmez.
HSTS gönderilecek URL’yi önceden değiştirir
HSTS browser’ın domain adına bağlı cached policy’sidir. Hatasız HTTPS response üzerinden alınan Strict-Transport-Security header’ı max-age boyunca host’u kaydeder; insecure HTTP üzerinden gelen header dikkate alınmaz. Browser known host için http URL’yi yüklemeden önce https yapar. Explicit port 80, 443 olur; başka explicit port aynı kalır. Bu işlem server’ın 301 response’unu bekleyen redirect değildir; network request’ten önce local URL değişimidir. Known HSTS host’ta certificate veya secure-transport error varsa browser’ın devam etmek için warning’i aşma seçeneği sunması beklenmez; local policy güvenli olmayan connection’ı kabul ederek uygulanmaz.
includeSubDomains descendant domain’lara scope genişletir, parent veya sibling domain’a değil. Expiry receipt time + max-age ile yenilenir; max-age=0 o host’un dynamic kaydını kaldırır, bağımsız subdomain kayıtlarını otomatik silmez. İlk ziyarette known policy yoksa dynamic HSTS henüz korumaz; browser preload listesi farklı dağıtılan policy kaynağıdır. Header’a preload kelimesini eklemek tek başına browser listesine giriş kanıtı değildir. HSTS CDN’in upstream HTTP seçimini değiştirmez.
Mixed content başka bir resource request’tir
HTTPS document içindeki http script URL’si, browser’ın ikinci ve insecure resource request’ini tanımlar. Güncel standardın bu örneğinde script ve fetch/XHR gibi blockable request’ler default policy ile engellenir. Belirli img, audio ve video request’leri upgradeable kategorisinde https URL’ye çevrilebilir. Ancak image-set/srcset/picture context’i ve IP-address host için aynı sonucu her image’a yayamayız. CORS ayrı bir policy’dir; URL’nin upgrade edilmesi CORS kontrolünün geçtiğini göstermez. “Passive güvenli, active tehlikeli” ayrımı güncel algoritmanın yerine geçmez.
HTTPS’e upgrade edilmesi resource’un başarıyla yüklendiğini söylemez: yeni URL’de server ve certificate uygun olmalıdır; bu profil başarısız upgrade’i HTTP fallback başarısı olarak çizmez. Top-level insecure navigation ayrı category’dir; her http link’i aynı mixed-content request değildir. Artifact script blocked, ordinary image upgraded, IP-host image blocked ve already-HTTPS satırlarını context input’larıyla ayırır. Gerçek browser override, CSP upgrade policy ve bütün Fetch algoritması bu küçük tabloya indirgenmez.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
Plaintext hop
- Browser’ın doğruladığı peer bellidir
Browser https://notes.example.org/notes için CDN’i doğrular. hop-A traffic context’i hop-B/hop-C ile tek end-to-end TLS connection değildir; public HTTPS bütün upstream path’i tanımlamaz.
- Public-URL evidence
- Browser→CDN / hop-A
- Per-hop gate
- Hop gate yok
- Plaintext-scope review
- Data copy scope yok
- Hop koşulu kendi verifier’ındadır
plaintext-upstream hopSchemes=[https, https, http] verir. Son connection HTTP olduğundan hop-C TLS protection seçilmez; browser certificate failure çıkarılmaz.
- Public-URL evidence
- Browser→CDN / hop-A
- Per-hop gate
- Hop-C plaintext / edge HTTPS valid
- Plaintext-scope review
- Data copy scope yok
- Plaintext okuyucuları scope’a eklendi
termination.plaintextReaders Browser, CDN, Reverse proxy, Application’dır. Bütün network hop’lar TLS olsa bile seçilmiş terminators body’yi okuyabilir; wire secrecy endpoint secrecy değildir.
- Public-URL evidence
- Browser→CDN / hop-A
- Per-hop gate
- Hop-C plaintext / edge HTTPS valid
- Plaintext-scope review
- CDN/proxy/app can read plaintext
- Scheme string channel evidence değildir
External URL https yazısı doğrudan internal connection’ı HTTPS yapmaz. Approved edge’in scheme bilgisini taşımak ile upstream reference identity check’i ayrı policy ve evidence gerektirir.
- Public-URL evidence
- External scheme / internal channel separate
- Per-hop gate
- Hop-C plaintext / edge HTTPS valid
- Plaintext-scope review
- CDN/proxy/app can read plaintext
- Browser policy upstream’i onarmaz
HSTS upstreamProtectionChanged=false’dur. Plaintext server-to-server hop browserMixedContent=false kalabilir; mixed-content uyarısı olmaması internal TLS kanıtı değildir.
- Public-URL evidence
- External scheme / internal channel separate
- Per-hop gate
- HSTS/mixed content ≠ upstream TLS
- Plaintext-scope review
- CDN/proxy/app can read plaintext
- Transport boundary sonucu açık kaldı
RequestDeliveredToApplication=true yalnız verilmiş path sonucudur; son plaintext hop açıkça sınıflanır. Her data copy’nin confidentiality/log/retention policy’si ayrıca incelenir.
- Public-URL evidence
- External scheme / internal channel separate
- Per-hop gate
- HSTS/mixed content ≠ upstream TLS
- Plaintext-scope review
- Plaintext boundary identified
Upstream name
- Browser’ın doğruladığı peer bellidir
Browser https://notes.example.org/notes için CDN’i doğrular. hop-A traffic context’i hop-B/hop-C ile tek end-to-end TLS connection değildir; public HTTPS bütün upstream path’i tanımlamaz.
- Public-URL evidence
- Browser→CDN / hop-A
- Per-hop gate
- Hop gate yok
- Plaintext-scope review
- Data copy scope yok
- Hop koşulu kendi verifier’ındadır
upstream-name-fail hopIdentityAccepted=[true, false, null] verir. CDN’in proxy.example.org identity gate’i kapanınca request reverse proxy’ye ulaşmış sayılmaz.
- Public-URL evidence
- Browser→CDN / hop-A
- Per-hop gate
- Hop-B rejected / downstream pending
- Plaintext-scope review
- Data copy scope yok
- Request’in eriştiği endpoint sınırlıdır
Browser ve CDN bu request’e erişir. CDN, proxy.example.org hostname kontrolünü geçemediği için reverse proxy’ye request göndermez; application da bu request’i almaz. Genel plaintextReaders listesi endpoint kapasitesini anlatır, bu başarısız dalda delivery kanıtı değildir.
- Public-URL evidence
- Browser→CDN / hop-A
- Per-hop gate
- Hop-B rejected / downstream pending
- Plaintext-scope review
- Request yalnız Browser/CDN’de; downstream yok
- Scheme string channel evidence değildir
External URL https yazısı doğrudan internal connection’ı HTTPS yapmaz. Approved edge’in scheme bilgisini taşımak ile upstream reference identity check’i ayrı policy ve evidence gerektirir.
- Public-URL evidence
- External scheme / internal channel separate
- Per-hop gate
- Hop-B rejected / downstream pending
- Plaintext-scope review
- Request yalnız Browser/CDN’de; downstream yok
- HSTS başarısız hop’u açmaz
HSTS’nin upstreamProtectionChanged=false alanı browser policy’sinin server hop doğrulamasını değiştirmediğini gösterir. Bu dalda hop-B hostname kontrolü başarısızdır ve hop-C hiç değerlendirilmez. Plaintext-upstream başka bir karşılaştırmadır; bu hata dalına HTTP delivery eklenmez.
- Public-URL evidence
- External scheme / internal channel separate
- Per-hop gate
- Hop-B hostname başarısız; hop-C değerlendirilmedi
- Plaintext-scope review
- Request yalnız Browser/CDN’de; downstream yok
- Transport boundary sonucu açık kaldı
RequestDeliveredToApplication=false ve downstream identity null koşulları korunur. Başarısız hop’un ötesine delivery veya application effect eklenmez.
- Public-URL evidence
- External scheme / internal channel separate
- Per-hop gate
- Hop-B hostname başarısız; hop-C değerlendirilmedi
- Plaintext-scope review
- Hop failure / application not reached
VARSAYIM · SINIR · KONTROL
Kilidin arkasındaki trusted endpoint’ler
Risk review’da browser’ın doğruladığı CDN’in body’yi okuyabildiğini yazmak gerekir. TLS confidentiality network observer’a karşıdır, seçilmiş peer’e karşı değildir. Hop-B ve hop-C’nin de TLS olması CDN’i veya reverse proxy’yi plaintext’ten uzaklaştırmaz. Trusted processor sayısı arttığında secret handling, log policy ve data retention scope’u da büyür; her TLS success business trust kararı olmaz.
Selected plaintext-upstream branch koşullu bir control farkını gösterir: son network hop’ta TLS record protection yoktur. Bu, browser’daki content scheme veya certificate başarısızlığının kanıtı değildir. Soruyu doğru boundary’ye sor: hangi network segment, hangi endpoint ve hangi data copy? Bu netlik, server-side transport eksikliğini mixed-content uyarısı bekleyerek gözden kaçırmayı önler.
Scheme label’i channel evidence değildir
Application external URL’yi https olarak biliyor olabilir ama kendi direct connection’ı HTTP olabilir. Bu olağan termination architecture’ında approved edge’in external scheme bilgisini güvenli context olarak taşıması ayrı tasarım konusudur. Sadece string https görmek internal peer’in certificate doğrulandığını veya body’nin son hop’ta korunmuş olduğunu kanıtlamaz.
Tersi de doğrudur: backend connection’ı TLS diye browser service identity’nin doğru olduğu sonucu çıkmaz. Selected upstream-name-fail branch’te CDN gate’i kapanır; request reverse proxy’ye ulaşmaz. Failure’ın local kalması gerekir. “Bir yerde TLS var” yerine each-hop verifier, reference identity ve actual protection koşulları belirtilirse eksik varsayım somutlaşır.
HSTS ve mixed content’in farklı kapsamı
HSTS host policy’nin önceden bilindiği varsayımına dayanır; dynamic policy ilk insecure request’i geçmişe dönük koruyamaz. Mixed-content policy ise bir secure document’ın subresource context’ine bakar. HSTS’yi tüm server-to-server hop’ları encrypt eden mekanizma veya mixed content’i bütün insecure link’leri engelleyen blanket policy saymak iki farklı control’ü yanlış birleştirir.
Tablodaki script blocked outcome’u request gönderilmemesidir; server response geldiği veya içerik sanitize edildiği değildir. Image upgraded outcome’u URL rewrite’tır; image decoded sonucu değildir. Gözlenen sonucu data-delivery veya application-impact sonucuyla karıştırmadan kaynak context’ini ve normal failure boundary’sini koru.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
HSTS scope
- Policy receipt ile lifetime birlikte
HSTS policy error-free HTTPS üzerinden t=1000 anında alınmıştır. Max-age 600 saniye olduğundan expiry 1600’dür. t=1300 anında aktif, t=1600 anında sona ermiştir; bu örnekte preload yoktur.
- Browser-policy evidence
- Dynamic HSTS / 1000+600=1600
- Host/request classification
- Scope calculation yok
- Gözlem ve kapsam
- Review sonucu yok
- Host ve port scope’u hesaplandı
includeSubDomains, img.notes.example.org’u kapsar; other.example.org ve example.org kapsam dışında kalır. Açıkça yazılmış port 80, port 443’e dönüşür; custom port 8080 korunur. Bu policy bütün domain ağacına uygulanmaz.
- Browser-policy evidence
- Dynamic HSTS / 1000+600=1600
- Host/request classification
- Subdomain label / 80→443 / 8080 kept
- Gözlem ve kapsam
- Review sonucu yok
- Policy secure receipt’e bağlıdır
receivedOverErrorFreeHttps=true policy kaydının ön koşuludur. Insecure HTTP üzerinden aynı header metnini görmek dynamic HSTS kaydı oluşturmaz. preloaded=false olduğu için bu örneğin kararı yalnız verilmiş dynamic entry’ye dayanır.
- Browser-policy evidence
- Secure receipt var; preload yok
- Host/request classification
- Subdomain label / 80→443 / 8080 kept
- Gözlem ve kapsam
- Policy kaynağı dynamic entry
- Expiry anında rewrite uygulanmaz
Aynı notes.example.org URL’si t=1300’de HTTPS’e çevrilir; t=1600’de entry sona erdiği için bu dynamic policy rewrite yapmaz. Bu ikinci sonuç HTTP request’in gerçekten gönderildiğini veya başka preload/policy bulunmadığını ölçmez.
- Browser-policy evidence
- Expiry 1600; karşılaştırma 1300 / 1600
- Host/request classification
- Dynamic rewrite: aktif / sona ermiş
- Gözlem ve kapsam
- Gönderim ve receipt gözlenmedi
- Browser policy kaydı kanıtı üretir
Gerçek incelemede browser’ın host entry’si, secure receipt bilgisi, includeSubDomains ve değerlendirme zamanı gerekir. Header örneği bu cache state’in varlığını tek başına kanıtlamaz. Verilmiş tablo scope hesabını açıklar; browser cache veya version davranışı burada ölçülmemiştir.
- Browser-policy evidence
- Expiry 1600; karşılaştırma 1300 / 1600
- Host/request classification
- Dynamic rewrite: aktif / sona ermiş
- Gözlem ve kapsam
- Üretici browser policy state’i; coverage sınırlı
- Rewrite upstream koruması değildir
Browser rewrite’ı yükleme öncesi yerel URL kararıdır. CDN ve reverse proxy’nin TLS identity kontrolü veya son hop HTTP seçimi başka üreticilerin kanıtını ister. HSTS tablosu request delivery, response veya pixels sonucu üretmez.
- Browser-policy evidence
- Expiry 1600; karşılaştırma 1300 / 1600
- Host/request classification
- Dynamic rewrite: aktif / sona ermiş
- Gözlem ve kapsam
- HSTS scope biliniyor; upstream ayrı
Mixed context
- Secure document resource istiyor
mixedProfile secure document ve default policy kullanır; CSP upgrade, resource host için prior HSTS ve top-level navigation seçilmemiştir. Browser değerlendirmesi URL ile birlikte destination ve initiator bilgisine dayanır.
- Browser-policy evidence
- Secure document; default policy
- Host/request classification
- Destination/initiator henüz sınıflanmadı
- Gözlem ve kapsam
- Network/render sonucu yok
- HTTP script yerelde engellenir
http://assets.example.org/main.js için destination ve initiator script’tir. Bu request upgradeable kategoriye girmez ve seçilmiş default policy ile blocked olur. Bu yerel karar server’ın request aldığı veya içerik sanitize ettiği anlamına gelmez.
- Browser-policy evidence
- HTTP script; secure initiator
- Host/request classification
- Blocked; request gönderilmez
- Gözlem ve kapsam
- Response ve execution yok
- Hostname image için URL değişir
Ayrı row’daki http://assets.example.org/cover.png image’ı, imageset initiator olmadan upgraded-url-only sonucu verir. URL HTTPS’e döner; server, certificate, response ve image decoding başarısı bu row’da ölçülmez.
- Browser-policy evidence
- Karşılaştırma: normal hostname image
- Host/request classification
- HTTPS URL’ye upgrade; load bilinmiyor
- Gözlem ve kapsam
- Delivery ve pixels için ayrı kanıt gerekir
- Imageset ve IP-host aynı kuralı izlemez
imageset initiator’lı hostname image ile 192.0.2.10 IP-host image’ı bu profile’da blocked’dır. “Bütün image’lar upgrade olur” çıkarımı bu iki negative row’u kaçırır. Already-HTTPS script ise mixed scheme kararı gerektirmez; load sonucu yine ayrı kalır.
- Browser-policy evidence
- Imageset / IP-host / HTTPS row’ları
- Host/request classification
- Blocked / blocked / already-https
- Gözlem ve kapsam
- Load sonucu verilmedi
- Fetch policy gözlemi request’le eşleştirilir
Gerçek browser incelemesinde secure Document context’i, resource URL, destination, initiator ve kullanılan policy birlikte gerekir. Browser’ın local block/upgrade sonucu network kaydından ayrılır; kaydın yokluğu kapsam ve instrumentation bilinmeden tek başına block nedeni kanıtlamaz.
- Browser-policy evidence
- Imageset / IP-host / HTTPS row’ları
- Host/request classification
- Her resource kendi context’iyle sınıflanır
- Gözlem ve kapsam
- Üretici browser Fetch policy; coverage gerekir
- Policy sonucu pixels başarısı değildir
Script ve uygun olmayan image row’larında gönderim engellenir; normal image row’unda yalnız URL upgrade bilinir. Network gönderimi, response receipt ve rendering ayrı aşamalardır. Bu seçilmiş policy tablosu browser compatibility veya image decode sonucu değildir.
- Browser-policy evidence
- Seçilmiş resource row’ları incelendi
- Host/request classification
- Block / upgrade / HTTPS ayrıldı
- Gözlem ve kapsam
- Policy scope biliniyor; render ölçülmedi
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Her hop için bir ledger tut
Atlas ledger’da client, server, scheme, reference identity, certificate-check outcome ve key alias ayrı sütunlardır. Normal case’te CDN notes.example.org için browser’a server’dır; proxy.example.org için TLS client’tır. Reverse proxy app.example.org için başka client’tır. Server-only certificate profile seçildiği için upstream server’ın client identity doğruladığını iddia etmeyiz; mTLS istenirse ayrı certificate ve policy koşulları gerekir.
TLS configure etmek kadar actual server identity verification’ı açık tutmak gerekir. Trust anchor, hostname ve private-key proof kontrollerini disable edilmiş configuration ile “encrypted” başarısına indirgeme. Plaintext hop varsa bunu envanterde açıkça göster, data ve network boundary gerekçesini kaydet. TLS’deki olumlu network property, endpoint secret policy’nin yerine geçmez.
Browser policy state’ini ayrı doğrula
HSTS evidence bir header string’inden fazlasıdır: secure receipt, host scope ve non-expired cache entry gerekir. Fixture expiry 1000+600=1600 olarak hesaplanır; now=1300’de active, now=1600’de expired olur. includeSubDomains için label boundary kontrolü, sibling ve parent’ın kapsam dışı kalması, explicit port 80 dönüşümü ve custom port preservation anlamlı regression noktalarıdır.
Preload durumu bu fixture’de false’tur. Production policy için tüm affected subdomain’ların HTTPS readiness’ı ayrı değerlendirilir; browser listesine gönderim veya domain değişikliği burada yapılmaz. max-age=0’ın yalnız kendi dynamic kaydını kaldırdığı nüansını koru. HSTS local rewrite sahnesi wire transfer çizmeden Browser state’ini değiştirir; ardından ordinary HTTPS request’in CDN’e arrival’ı gösterilir.
Subresource’ları gerçek context’leriyle sınıflandır
Mixed-content review bir URL listesi kadar request destination ve initiator bilgisini de ister. Document scheme, image versus imageset, host türü ve selected CORS mode sonucu değiştirir. Secure document’ın default policy’siyle http script’i engellemek, CSP upgrade-insecure-requests gibi ek policy’nin bulunmadığı bu case’in outcome’udur. İleride ek policy varsa upgrade ve block sıralaması current Fetch integration ile birlikte yeniden değerlendirilir.
Regression’da network gönderimi, response receipt ve content render ayrı evidence olarak kalır. Script blocked case’inde CDN idle kalmalı; ordinary image’in local https rewrite’ı yeni request’in başarıyla tamamlandığını söylememeli. Gerçek browser version ve override davranışları ayrıca test edilmeden bu deterministic standard-profile tablosuna browser compatibility sonucu yazma.
ŞİMDİ VAKAYA UYGULA
Browser HTTPS, upstream TLS ve subresource policy neyi ayrı korur?
Browser’ın TLS peer’i notes adına hizmet veren CDN’dir. Reverse proxy ve application için başka hop’lar doğrulanır; son hop HTTP olabilir. HSTS ve mixed-content policy bu server-side boundary’yi otomatik korumaz.
Vakadaki güvenli bağlantının peer’i kimdir? TLS peer trust, browser origin ve kullanıcıya verilen object permission kararlarını ayrı anlat.
Bağlı vaka dosyasını aç ↗ÖRNEĞİ BİRLİKTE OKUYALIM
Atlas · HTTPS ve TLS termination zinciri
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"profile": {
"transport": "selected HTTP over TLS 1.3 or HTTP plaintext hop",
"actualNetworkRun": false,
"certificateBytesPresent": false
},
"request": {
"method": "GET",
"publicUrl": "https://notes.example.org/notes",
"body": null
},
"hops": [
{
"client": "Browser",
"server": "CDN",
"scheme": "https",
"referenceIdentity": "notes.example.org",
"pathValidSelected": true,
"hostnameValidSelected": true,
"privateKeyProofValidSelected": true,
"trafficKeyAlias": "hop-A",
"clientCertificateRequested": false
},
{
"client": "CDN",
"server": "Reverse proxy",
"scheme": "https",
"referenceIdentity": "proxy.example.org",
"pathValidSelected": true,
"hostnameValidSelected": true,
"privateKeyProofValidSelected": true,
"trafficKeyAlias": "hop-B",
"clientCertificateRequested": false
},
{
"client": "Reverse proxy",
"server": "Application",
"scheme": "https",
"referenceIdentity": "app.example.org",
"pathValidSelected": true,
"hostnameValidSelected": true,
"privateKeyProofValidSelected": true,
"trafficKeyAlias": "hop-C",
"clientCertificateRequested": false
}
],
"termination": {
"plaintextReaders": [
"Browser",
"CDN",
"Reverse proxy",
"Application"
],
"endToEndSingleTlsConnection": false,
"independentTrafficContexts": [
"hop-A",
"hop-B",
"hop-C"
]
},
"cases": [
{
"case": "normal",
"hopSchemes": [
"https",
"https",
"https"
],
"hopIdentityAccepted": [
true,
true,
true
],
"requestDeliveredToApplication": true,
"browserMixedContent": false
},
{
"case": "plaintext-upstream",
"hopSchemes": [
"https",
"https",
"http"
],
"hopIdentityAccepted": [
true,
true,
null
],
"requestDeliveredToApplication": true,
"browserMixedContent": false
},
{
"case": "upstream-name-fail",
"hopSchemes": [
"https",
"https",
"https"
],
"hopIdentityAccepted": [
true,
false,
null
],
"requestDeliveredToApplication": false,
"browserMixedContent": false
},
{
"case": "mixed-script",
"hopSchemes": [],
"hopIdentityAccepted": [],
"requestDeliveredToApplication": false,
"browserMixedContent": true
}
],
"hsts": {
"host": "notes.example.org",
"receivedOverErrorFreeHttps": true,
"receiptSeconds": 1000,
"maxAgeSeconds": 600,
"expirySeconds": 1600,
"includeSubDomains": true,
"preloaded": false,
"upstreamProtectionChanged": false
},
"hstsCases": [
{
"url": "http://notes.example.org/notes",
"now": 1300,
"expected": "https://notes.example.org/notes"
},
{
"url": "http://img.notes.example.org/p.png",
"now": 1300,
"expected": "https://img.notes.example.org/p.png"
},
{
"url": "http://notes.example.org:80/notes",
"now": 1300,
"expected": "https://notes.example.org:443/notes"
},
{
"url": "http://notes.example.org:8080/notes",
"now": 1300,
"expected": "https://notes.example.org:8080/notes"
},
{
"url": "http://other.example.org/notes",
"now": 1300,
"expected": "http://other.example.org/notes"
},
{
"url": "http://example.org/notes",
"now": 1300,
"expected": "http://example.org/notes"
},
{
"url": "http://notes.example.org/notes",
"now": 1600,
"expected": "http://notes.example.org/notes"
}
],
"mixedProfile": {
"documentSecure": true,
"defaultUserPolicy": true,
"cspUpgradeSelected": false,
"noPriorHstsForResourceHost": true,
"topLevelNavigation": false,
"potentiallyTrustworthyLoopbackSelected": false
},
"mixedCases": [
{
"destination": "script",
"initiator": "script",
"url": "http://assets.example.org/main.js",
"cors": false,
"expected": "blocked"
},
{
"destination": "image",
"initiator": "",
"url": "http://assets.example.org/cover.png",
"cors": false,
"expected": "upgraded-url-only"
},
{
"destination": "image",
"initiator": "imageset",
"url": "http://assets.example.org/cover.png",
"cors": false,
"expected": "blocked"
},
{
"destination": "image",
"initiator": "",
"url": "http://192.0.2.10/cover.png",
"cors": false,
"expected": "blocked"
},
{
"destination": "script",
"initiator": "script",
"url": "https://assets.example.org/main.js",
"cors": false,
"expected": "already-https"
}
]
}- hops
- Bağımsız peer, reference identity ve key context; secret bytes bulunmaz.
- hstsCases
- Cached dynamic policy host/expiry/port koşullarıyla local URL’yi değiştirir.
- mixedCases
- Default secure-document profile’da destination ve initiator outcome’u ayırır.
Hop verification outcomes declared condition’lardır. Gerçek certificate/connection veya browser cache yoktur; HSTS ve mixed-content tabloları belirtilmiş standard profile’ın bounded hesaplamasıdır. Response/render sonucu üretilmez.
İki yanlış kanı
Browser HTTPS ise application’a kadar tek TLS connection vardır.
Termination endpoint’i plaintext okuyabilir; upstream başka connection ve başka verification context’tir.
HSTS bütün server hop’larını TLS yapar.
HSTS browser’ın cached host policy’sidir; backend transport selection’ı yönetmez.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
Browser→CDN HTTPS, proxy→application HTTP. Browser HSTS, upstream hop’u TLS’ye çevirir mi?
- Hayır. Upstream koruması ayrı hop policy’sidir.
- Evet. Browser’daki HTTPS bütün server zincirini şifreler.
Gerekçeli cevabı oku
Hayır. Upstream koruması ayrı hop policy’sidir. — HSTS browser’ın bilinen host için scheme kararını değiştirir. Proxy’nin upstream channel’ını dönüştürmez.
Bütün hop’lar HTTPS ise CDN body’yi okuyamaz mı?
Dersten seçilen artifact alanları; öğretim örneği
- termination.plaintextReaders
- ["Browser","CDN","Reverse proxy","Application"]
- termination.endToEndSingleTlsConnection
- false
- CDN okuyabilir; tek end-to-end TLS connection yok.
- Yalnız Browser ve Application plaintext görebilir.
Gerekçeli cevabı oku
CDN okuyabilir; tek end-to-end TLS connection yok. — Bu zincirde CDN bir TLS endpoint’tir ve plaintextReaders listesine dahildir.
Secure document’ın HTTP script’i blocked, HTTP image URL’si upgraded. Neden bütün mixed content başarıyla yüklendi diyemeyiz?
Gerekçeli cevabı oku
Bu policy script’i engeller; uygun image URL’sini HTTPS’e yükseltir. imageset ve IP-host image durumları farklıdır. URL’nin yükseltilmesi fetch, TLS veya decode başarısının gözlemi değildir. Mixed-content policy server tarafındaki upstream hop’ları da kapsamaz.
□ Image, script ve initiator koşullarını ayırdım.
□ URL rewrite sonucunu load success saymadım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- HTTP Semantics3.3 Connections, Clients, and Servers; 3.7 Intermediaries · 4.2.2 https; 4.3.4 Certificate Verification · 7.4 Rejecting Misdirected Requests · 7.6.1 Connection; 7.6.3 Via; 7.7 Message Transformations · 9.3.6 CONNECT
- The Transport Layer Security (TLS) Protocol Version 1.31.2 Relationship to RFC8446 · 2.2 Resumption and PSK; 2.3 0-RTT · 4.3.9 PSK key exchange modes; 4.3.11 Pre-shared key · 4.7.1 New Session Ticket · 7.1 Key Schedule; 7.4.2 ECDH · 8 0-RTT and Anti-Replay; F.5
- Service Identity in TLS6.1.1 independently constructed reference identifiers · 6.3 DNS-ID matching; 7.7 Certificate Trust
- HTTP Strict Transport Security (HSTS)6.1 Strict-Transport-Security syntax · 8.1 Header Processing; 8.1.1 Storage · 8.2 Domain Name Matching; 8.3 URI Loading and Port Mapping · 8.4 Errors in Secure Transport Establishment
- Strict-Transport-Security headerDescription; Expiration; Subdomains · Insecure HTTP requests; Preloading Strict Transport Security
- Mixed Content3.1 Upgradeable Content; 3.2 Blockable Content · 4.1 Upgrade a mixed content request · 4.4 Should fetching request be blocked; 4.5 response check
- Fetch Standard4.1 Main fetch, mixed-content upgrade and block hooks