Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

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.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Her hop TLS

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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ı

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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

  1. 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
  2. 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
  3. 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
  4. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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ı
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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?

  1. Hayır. Upstream koruması ayrı hop policy’sidir.
  2. 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
  1. CDN okuyabilir; tek end-to-end TLS connection yok.
  2. 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