Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-05.03

Handshake, SNI ve ALPN

TLS1.3 flight’larında offer, seçim, validation ve peer-local completion anlarını izle.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

TLS1.3 full flow

  1. TLS öncesinde TCP hazır

    Yeni TLS context’i, existing TCP üzerinde; no PSK/early data/client certificate seçilir.

    Client · TLS
    CH offers ready; TLS peer unverified; application gate=false
    Server · TLS
    TCP ready; no ClientHello; application gate=false
  2. ClientHello server’da

    Teklifler ve SNI geldi; service/user authentication sonucu yok.

    Client · TLS
    CH offers ready; TLS peer unverified; application gate=false
    Server · TLS
    CH received; SNI=api.example.org; ALPN offers=h2,http/1.1; peer unverified
  3. Local seçim ve flight hazırlığı

    Server cryptographic seçenekleri ve EE ALPN=h2 seçer; own Finished emission peer doğrulaması değildir.

    Client · TLS
    CH offers ready; TLS peer unverified; application gate=false
    Server · TLS
    selected TLS1.3/X25519; SH + protected flight ready; own Finished emitted; client Finished unverified
  4. ServerHello client’ta

    Selected key share/version/cipher local derivation context’i sağlar; identity pending kalır.

    Client · TLS
    SH received; handshake key context; service identity pending; application gate=false
    Server · TLS
    selected TLS1.3/X25519; SH + protected flight ready; own Finished emitted; client Finished unverified
  5. Protected flight client’ta

    Encrypted server handshake özeti alındı; receipt validation success değildir.

    Client · TLS
    EE/Certificate/CertificateVerify/Finished received; checks pending; application gate=false
    Server · TLS
    selected TLS1.3/X25519; SH + protected flight ready; own Finished emitted; client Finished unverified
  6. Local client authentication gate

    Client’ın kontrolleri başarılıdır ve kendi Finished’i gönderime verilmiştir; server henüz bu message’ı almamıştır.

    Client · TLS
    path/name/key proof/peer Finished=true; own Finished emitted; application gate=true
    Server · TLS
    selected TLS1.3/X25519; SH + protected flight ready; own Finished emitted; client Finished unverified
  7. Client Finished server’da

    Handshake-protected Finished arrival’ı oldu; local verification sonraki adım.

    Client · TLS
    path/name/key proof/peer Finished=true; own Finished emitted; application gate=true
    Server · TLS
    client Finished received; local verification pending; application gate=false
  8. Local server verification

    MAC kontrolü bu örnekte başarılıdır; iki yön application data için hazırdır. Henüz bir HTTP işlem sonucu oluşmamıştır.

    Client · TLS
    path/name/key proof/peer Finished=true; own Finished emitted; application gate=true
    Server · TLS
    client Finished verified; own Finished emitted; application gate=true; user identity unmodeled

Finished failure

  1. TLS öncesinde TCP hazır

    Yeni TLS context’i, existing TCP üzerinde; no PSK/early data/client certificate seçilir.

    Client · TLS
    CH offers ready; TLS peer unverified; application gate=false
    Server · TLS
    TCP ready; no ClientHello; application gate=false
  2. ClientHello server’da

    Teklifler ve SNI geldi; service/user authentication sonucu yok.

    Client · TLS
    CH offers ready; TLS peer unverified; application gate=false
    Server · TLS
    CH received; SNI=api.example.org; ALPN offers=h2,http/1.1; peer unverified
  3. Local seçim ve flight hazırlığı

    Server cryptographic seçenekleri ve EE ALPN=h2 seçer; own Finished emission peer doğrulaması değildir.

    Client · TLS
    CH offers ready; TLS peer unverified; application gate=false
    Server · TLS
    selected TLS1.3/X25519; SH + protected flight ready; own Finished emitted; client Finished unverified
  4. ServerHello client’ta

    Selected key share/version/cipher local derivation context’i sağlar; identity pending kalır.

    Client · TLS
    SH received; handshake key context; service identity pending; application gate=false
    Server · TLS
    selected TLS1.3/X25519; SH + protected flight ready; own Finished emitted; client Finished unverified
  5. Protected flight client’ta

    Encrypted server handshake özeti alındı; receipt validation success değildir.

    Client · TLS
    EE/Certificate/CertificateVerify/Finished received; checks pending; application gate=false
    Server · TLS
    selected TLS1.3/X25519; SH + protected flight ready; own Finished emitted; client Finished unverified
  6. Local client authentication gate

    Finished doğrulaması başarısızdır. Client kendi Finished’ini veya application data’yı göndermeye geçmez.

    Client · TLS
    path/name/key proof=true; server Finished=false; own Finished unsent; application gate=false
    Server · TLS
    selected TLS1.3/X25519; SH + protected flight ready; own Finished emitted; client Finished unverified

ALPN no overlap

  1. Ortak protocol bekleniyor

    ALPN list ve server support seçilmiş farklıdır.

    Client · TLS
    CH ALPN=h2 ready; peer unverified
    Server · TLS
    server ALPN support=http/1.1; no CH
  2. ALPN offer server’da

    Offer yalnız h2; server listesinde h2 yok.

    Client · TLS
    CH ALPN=h2 ready; peer unverified
    Server · TLS
    CH received; ALPN=h2; server supports http/1.1
  3. Local no-overlap kararı

    Selected negotiation no_application_protocol ile durur; new TCP açılmaz.

    Client · TLS
    CH ALPN=h2 ready; peer unverified
    Server · TLS
    no common ALPN; fatal alert prepared; no SH/protected channel
  4. Alert client’ta

    Failure alert’in anlamsal özeti client’a ulaştı. Bu gösterim gerçek wire encoding veya encryption üretmez.

    Client · TLS
    fatal no_application_protocol received; application gate=false
    Server · TLS
    no common ALPN; fatal alert prepared; no SH/protected channel

ECH accepted

  1. Seçilmiş ECH config

    Preconfigured public key alias ile Outer public_name ve Inner service ayrı hazırlanır.

    Client · TLS
    usable ECH config; Outer/Inner prepared; acceptance pending
    Server · TLS
    shared-mode ECH support; no Outer
  2. ClientHelloOuter server’da

    Outer arrival gerçek Inner service’in her gözlemciye açık olduğu anlamına gelmez; HPKE sonucu henüz yok.

    Client · TLS
    usable ECH config; Outer/Inner prepared; acceptance pending
    Server · TLS
    Outer received; public_name=front.example.org; encrypted Inner pending
  3. Local Inner seçimi

    Shared-mode terminator selected Inner’ı kullanır; bu hostname validation değildir.

    Client · TLS
    usable ECH config; Outer/Inner prepared; acceptance pending
    Server · TLS
    selected HPKE success; Inner SNI=api.example.org; ALPN=h2 offer; identity unverified
  4. Accepted response context

    ECH accepted koşulu seçilir; response actual TLS encoding’i bu modelde yok.

    Client · TLS
    usable ECH config; Outer/Inner prepared; acceptance pending
    Server · TLS
    ECH accepted selected; Inner-context response flight ready; client acceptance pending
  5. Response client’ta

    Response arrival’ı acceptance determination ve identity check yerine geçmez.

    Client · TLS
    Inner-context response received; ECH acceptance/identity checks pending
    Server · TLS
    ECH accepted selected; Inner-context response flight ready; client acceptance pending
  6. Local acceptance ve identity

    Acceptance ve identity kontrolleri başarılı olarak verilmiştir. Configuration discovery, retry ve HPKE işlemi çalıştırılmaz; application request’i gönderilmez.

    Client · TLS
    ECH acceptance + intended identity verified selected; Outer/IP metadata remain; no HTTP request
    Server · TLS
    ECH accepted selected; Inner-context response flight ready; client acceptance pending

ROLLER · STATE · VERİ AKIŞI

Yeni TLS connection’ın seçilmiş yolu

TLS-over-TCP sahnesi, TCP connection zaten kurulmuşken başlar. Yeni TLS 1.3 connection’da X25519 ephemeral share, server certificate authentication, ALPN ve 1-RTT kullanılır. Client certificate, PSK resumption, 0-RTT, HelloRetryRequest ve post-handshake authentication bu akışa dahil değildir. TLS handshake başlatmak, yeni bir TCP handshake yapıldığı anlamına gelmez.

Güncel RFC9846, aynı TLS 1.3 sürümüyle RFC8446’nın yerini alır; section numaraları da değişmiştir. Certificate/CertificateVerify/Finished güncel metinde 4.5.1/4.5.2/4.5.3’tür. Bu ders bir capture’ın byte’larını uydurmak yerine semantic message flight’ları ve her peer’in öğrenme/validation anlarını gösterir.

ClientHello teklif, ServerHello seçimdir

ClientHello supported_versions, cipher suites, supported groups/key_share ve signature_algorithms gibi teklifleri taşır. Seçilmiş normal örnekte TLS1.3, TLS_AES_128_GCM_SHA256, X25519 ve ed25519 capability’leri vardır; key-share byte’ı yerine alias kullanılır. TLS1.3 cipher suite AEAD/hash pair’i seçer, certificate signature veya key-exchange algoritmasının bütününü tek isim içinde seçmez.

ServerHello negotiated version/cipher ve selected key_share ile client’ın key schedule için gerekli context’ini tamamlar. shared-secret/handshake-key derivation local işlemdir; bu anahtarlar bir sonraki network mesajıyla taşınmaz. legacy_version alanını negotiated TLS sürümü sanma; modern version negotiation supported_versions ile yapılır. HelloRetryRequest gereken başka dal bu örneğe dahil değildir.

ServerHello sonrası protected handshake

EncryptedExtensions, certificate-authenticated dalda Certificate ve CertificateVerify, ardından server Finished gelir; ServerHello sonrasındaki handshake messages handshake traffic key’leriyle korunur. ClientHello ve ServerHello ordinary TLS1.3 dalında bu handshake protection’ın dışında kalır. EncryptedExtensions’de ALPN selection gibi server parameters yer alır; TLS1.2 ALPN çiziminin ServerHello yerleşimini aynen taşıma.

Flight bütün message’ların tek TCP segment veya tek TLS record olması demek değildir. Scene ServerHello arrival’ını protected server-flight arrival’ından ayırır, protected message’ları ise bir semantic summary’de toplar. Key alias’ları, deprotection ve path/name sonuçları seçilmiş koşullardır; gerçek serializer, transcript hash veya certificate parser çalıştırılmaz.

Transcript, key proof ve Finished aynı karar değildir

CertificateVerify, context string ve handshake transcript hash’i içeren signature input’u ile selected certificate private key possession’ını handshake’e bağlar. Finished, ilgili handshake traffic secret’tan türetilen key ile transcript üzerine MAC sağlar. Bu ikisi CA certificate signature’ı değildir; peer’in listesi, negotiated parameter history ve key confirmation farklı kanıtlardır.

Client path/hostname, CertificateVerify ve server Finished’i kabul edip kendi Finished’ini gönderince seçilen normal dalda local application-data gate’i açılır. Server kendi Finished’ini önceden göndermiş olsa da client Finished’i henüz alıp doğrulamamış olabilir. Server’ın ilk flight sonrası erken application data gönderebilmesi ayrı izinli durumdur; bu scene bunu seçmez ve client user identity’si kanıtlamaz.

SNI service seçimine yardım eder

SNI server_name extension’ının host_name alanı client’ın istediği DNS hostname’i bildirir; server certificate/configuration seçiminde kullanabilir. api.example.org bir routing hint’tir, authenticated user veya doğru hostname certificate kanıtı değildir. Server bu ad için configuration seçse bile client bağımsız reference identity validation yapar.

RFC6066 host_name ASCII DNS name’idir; IDN için A-label biçimi kullanılır, trailing dot veya literal IPv4/IPv6 konmaz. SNI ile HTTP authority/Host farklı katmandadır: normal case aynı service niyetini taşır, fakat ilkini ikinci katmanın authorization proof’u sayma. SNI onayı TLS1.3’te EncryptedExtensions context’indedir; eski extended ServerHello yerleşimini current profile’a genelleme.

ALPN bir connection için tek protocol seçer

Client h2 ve http/1.1 teklif eder; seçilmiş server preference h2’yi ortak seçenek olarak bulur ve EncryptedExtensions’de h2 seçimini bildirir. Bu negotiation yeni TCP connection açmaz; hangi application parser/semantics’in bu TLS connection üzerinde kullanılacağını belirler. h2 teklif etmek veya port443’e bağlanmak h2’nin seçildiği anlamına gelmez.

No-overlap durumunda client yalnız h2, server yalnız http/1.1 destekler. ALPN negotiation no_application_protocol fatal sonucuyla durur. Bu senaryo failure’dan önce ServerHello veya protected channel kurulmasını göstermez; yalnız alert’in anlamını ve client’a ulaşmasını izler. Gerçek wire encoding veya encryption üretilmez. h3, QUIC üzerindeki HTTP/3 context’ine aittir; TLS-over-TCP üzerinde h2 seçmek HTTP/3’e geçmek değildir.

ECH ordinary TLS1.3’ten ek koşul ister

RFC9849 ECH için public ClientHelloOuter ve şifreli ClientHelloInner ayrımını tanımlar. Uygun config/public key ve client/server desteğiyle accepted ECH, gerçek service’in SNI ve hassas tekliflerini Inner’da koruyabilir; Outer public_name ve dış bağlantı bilgileri yine vardır. TLS1.3 demek her ClientHello’nun gizlendiği anlamına gelmez.

ECH örneğinde kullanılabilir configuration önceden verilmiştir ve shared mode kullanılır: client-facing server ile TLS terminator aynı aktördür. Inner’ın local olarak açılması ve ECH acceptance kararı, handshake identity doğrulamasının yerine geçmez. Rejected ECH üzerinden kurulmuş connection application data için kullanılamaz; retry ve configuration seçimi ayrı bir süreçtir. ECH, IP, zaman ve boyut gözlemlerini veya endpoint’in bildiği service bilgisini bütünüyle saklamaz. ECH’nin bulunması ile kabul edilmesi farklıdır.

2. Red · Güven ve etki

Hareket olmadan bütün senaryoları oku

Finished gate

  1. Negotiation henüz authentication değil

    ServerHello TLS 1.3/cipher/group seçer; ALPN EncryptedExtensions içinde seçilir. SH arrival clientPeerVerified=false koşulunu değiştirmez; key share identity verdict değildir.

    Negotiation evidence
    SH selection / identity pending
    Verification gate
    Verification yok
    Application boundary
    Application gate kapalı
  2. Receipt ve doğrulama ayrıldı

    finishedFailure path/name/CertificateVerify=true fakat serverFinished=false verir. Finished mesajının gelmesi local MAC check’in geçtiği anlamına gelmez.

    Negotiation evidence
    SH selection / identity pending
    Verification gate
    Finished received ≠ verified
    Application boundary
    Application gate kapalı
  3. Application gate kendi koşulunu korudu

    clientFinishedSent=false ve applicationGateOpen=false failure case’inin sonuçlarıdır. Provisional protected flight’ı application başarı state’ine yükseltme.

    Negotiation evidence
    SH selection / identity pending
    Verification gate
    Finished received ≠ verified
    Application boundary
    Own Finished withheld / gate closed
  4. SNI selection yetki taşımaz

    sniDnsName=api.example.org server configuration seçimine bilgi verir. serverNameResponseCarriesHostname=false ve user/resource permission ayrı application koşullarıdır.

    Negotiation evidence
    SNI hint / not user authority
    Verification gate
    Finished received ≠ verified
    Application boundary
    Own Finished withheld / gate closed
  5. Server’ın sonraki adımı atlandı

    Client kendi Finished’ini göndermediği için server bu mesajı alıp doğrulayamaz. Başarısız server Finished kontrolü, application gate’i kapalı tutar; SNI seçimi bu sonucu değiştirmez.

    Negotiation evidence
    SNI hint / user yetkisi değil
    Verification gate
    Server Finished başarısız; client Finished yok
    Application boundary
    Application gate kapalı
  6. Doğrulama başarısız, application kapalı

    Path, hostname ve CertificateVerify koşulları doğru olsa da serverFinished=false sonucunu telafi etmez. Bu örnekte client Finished ve application data gönderimi atlanır; gerçek bağlantıdaki hata nedenini belirlemek ayrıca endpoint kanıtı ister.

    Negotiation evidence
    SNI hint / user yetkisi değil
    Verification gate
    Server Finished başarısız; client Finished yok
    Application boundary
    Finished reddedildi; application kapalı

ECH scope

  1. Outer ve Inner ayrı ad taşır

    ECH örneğinde public Outer, front.example.org adını taşır; Inner’ın istediği service api.example.org’dur. Kullanılabilir configuration ve shared-mode terminator verilmiştir. Outer’ı görmek, Inner’ın kabul edildiğini veya service identity’sinin doğrulandığını göstermez.

    Negotiation evidence
    Outer front.example.org / Inner api.example.org
    Verification gate
    Acceptance ve identity henüz incelenmedi
    Application boundary
    Application sonucu yok
  2. Receipt ve doğrulama ayrıldı

    ECH acceptedSelected ve echAcceptanceVerifiedSelected birlikte verilmiştir. Extension görünümü bu acceptance veya intendedServiceIdentityVerifiedSelected sonucunu tek başına üretmez.

    Negotiation evidence
    Outer front.example.org / Inner api.example.org
    Verification gate
    ECH acceptance requires check
    Application boundary
    Application gate kapalı
  3. Kabul edilmiş ECH’nin sınırı

    Bu dalda acceptedSelected, echAcceptanceVerifiedSelected ve intendedServiceIdentityVerifiedSelected true’dur. Rejected connection’ın application için kullanılamaması ayrı bir kuraldır; burada rejection gerçekleşmiş gibi gösterilmez. HTTP işlemi veya retry sonucu verilmemiştir.

    Negotiation evidence
    Outer front.example.org / Inner api.example.org
    Verification gate
    Acceptance ve intended identity koşulları doğru
    Application boundary
    Accepted ECH; HTTP sonucu yok
  4. Terminator service’i bilir, user izni ayrıdır

    Shared mode’da Inner’ı açan TLS terminator api.example.org adını öğrenir. Bu service bilgisi kullanıcı identity’si veya resource authorization değildir. Kabul edilmiş ECH, endpoint’in kendi bildiği service adını endpoint’ten gizlemez.

    Negotiation evidence
    Terminator Inner service adını bilir
    Verification gate
    Acceptance ve intended identity koşulları doğru
    Application boundary
    Accepted ECH; HTTP sonucu yok
  5. Privacy scope’u genişletilmedi

    normal CH/SH handshake keys ile korunmaz; postServerHelloHandshakeProtected=true olur. ECH Outer public kalır ve ip/time/size fully hidden=false; encryption bütün metadata’yı gizlemez.

    Negotiation evidence
    Terminator Inner service adını bilir
    Verification gate
    Outer/public metadata separate
    Application boundary
    Accepted ECH; HTTP sonucu yok
  6. Failure kontrolü scope’unda bitti

    ECH shared-mode terminator, preconfigured config ve seçilmiş acceptance conditions ile sınırlıdır. HPKE/DNS veya live client support çalıştırılmadığından deployment acceptance sonucu eklenmez.

    Negotiation evidence
    Terminator Inner service adını bilir
    Verification gate
    Outer/public metadata separate
    Application boundary
    ECH kabul koşulları verilmiş; runtime ölçülmedi

VARSAYIM · SINIR · KONTROL

Kırılan varsayım: Hello seçimi authentication’dır

Key share ve cipher seçimini görüp service identity doğrulanmış saymak, path/name/CertificateVerify/Finished gate’lerini atlar. SNI configuration seçimi de aynı hatayı onarmaz.

Kontrol negotiated context ile validated identity’yi ayrı state’te tutmaktır. Scene SH arrival’ında keys context’i vardır ama identity pending kalır.

Kırılan varsayım: Finished varlığı doğruluğudur

Finished mesajı geldiği halde MAC doğrulanmamışsa key confirmation tamamlanmış değildir. Gerekli hata received transcript verisini validation sonucu gibi kullanmaktır.

Kontrol local check başarısızlığında own Finished/application gate’ini açmamaktır. Failure dalı seçilmiş fixture sonucu gösterir; gerçek transcript değiştirme veya ağ müdahalesi yapmaz.

Kırılan varsayım: privacy extension her şeyi gizler

ECH extension’ın görünmesi acceptance veya validated intended service sonucunu tek başına vermez. Outer context, IP ve traffic pattern bilgi sınırları ayrıca vardır.

Kontrol config, selected topology, acceptance ve identity sonucunu ayrı açıklamaktır. ALPN offer’ı da selected protocol diye kaydetmek aynı premature-state hatasıdır.

3. Blue · Güvenli geliştirme ve savunma

Hareket olmadan bütün senaryoları oku

Peer gates

  1. Offer seçilmiş protocol değildir

    Normal CH alpn=[h2, http/1.1] sunar. Server preference aynı listedir; ilk ortak h2 seçilir, EncryptedExtensions içinde bildirilir.

    Offer evidence
    Offer h2,http/1.1 / selected h2
    Selection evidence
    Selection review yok
    Peer-gate review
    Gate review yok
  2. Selection message doğru yerde

    alpnSelectedInServerHello=false’dur. TLS cipher suite certificate key type’ını belirtmez; version/cipher/group agreement ALPN ve certificate signature koşullarından ayrı okunur.

    Offer evidence
    Offer h2,http/1.1 / selected h2
    Selection evidence
    ALPN in EE / cipher≠cert key type
    Peer-gate review
    Gate review yok
  3. Client peer gate scope’u incelendi

    Protected server flight receipt hâlâ clientPeerVerified=false/clientApplicationReady=false’dur. Local path/name/CertificateVerify/Finished check’leri tamamlanmadan receipt success sayılmaz.

    Offer evidence
    Offer h2,http/1.1 / selected h2
    Selection evidence
    ALPN in EE / cipher≠cert key type
    Peer-gate review
    Receipt / client verification pending
  4. Server gate bağımsız güncellenir

    Client local checks+kendi Finished emission client ready=true yapar, serverPeerFinishedVerified=false kalır. Client Finished server receipt’inden sonra bile server local verification ayrı gerekir.

    Offer evidence
    Offer h2,http/1.1 / selected h2
    Selection evidence
    Emission ≠ server Finished verification
    Peer-gate review
    Client hazır; server Finished kontrolü bekliyor
  5. Server yerel doğrulamasını tamamladı

    peerGates[3] mesaj receipt’ini, peerGates[4] ise server’ın client Finished doğrulamasını gösterir. Yalnız ikinci aşamada serverPeerFinishedVerified ve serverApplicationReadySelected true olur. Normal ALPN seçimi h2 olarak kalır.

    Offer evidence
    Offer h2,http/1.1 / selected h2
    Selection evidence
    Server client Finished kontrolünü geçti
    Peer-gate review
    İki endpoint hazır; HTTP sonucu yok
  6. Endpoint kanıtı bağlantıyla eşleştirilir

    Gerçek incelemede client ve server TLS implementation’ları kendi verification sonucunu üretir. Connection context’iyle eşleşen bu sonuçlar, seçilmiş ALPN ve mesaj receipt’inden ayrı okunur. TLS gate’in açılması HTTP request, user authorization veya application commit kanıtı değildir.

    Offer evidence
    Offer h2,http/1.1 / selected h2
    Selection evidence
    Client ve server doğrulaması ayrı üretici ister
    Peer-gate review
    Peer gate’ler açık; HTTP bilinmiyor

ALPN kesişim yok

  1. Offer seçilmiş protocol değildir

    Client yalnız h2, server ise yalnız http/1.1 sunar. Ortak protocol olmadığı için selectedProtocol null kalır. Bir client offer’ını negotiated selection olarak kaydetmek bu negative control’ü gizler.

    Offer evidence
    Offer h2 / no overlap
    Selection evidence
    Selection review yok
    Peer-gate review
    Gate review yok
  2. Ortak protocol bulunmadı

    Client [h2] ve server [http/1.1] listelerinin kesişimi boştur. selectedProtocol=null kalır; bu dal EncryptedExtensions içinde bir ALPN seçimi üretmez. Pozitif dalın h2 sonucu bu bağlantıya taşınamaz.

    Offer evidence
    Offer h2 / server http/1.1
    Selection evidence
    Ortak protocol yok; ALPN selection yok
    Peer-gate review
    Gate sonucu incelenmedi
  3. Protected flight’a geçilmedi

    Server’ın seçilmiş sonucu no_application_protocol fatal alert’idir. Bu sahnede ServerHello, EncryptedExtensions, Certificate ve Finished flight’ı hazırlanmaz. Bu mesajlara ait receipt veya verification sonucu kayıt varmış gibi gösterilemez.

    Offer evidence
    Offer h2 / server http/1.1
    Selection evidence
    Fatal no_application_protocol
    Peer-gate review
    Protected flight atlandı
  4. Fatal alert verification failure değildir

    Core sahnede client bu alert’i alır ve application gate kapalı kalır. Path, hostname, CertificateVerify ve Finished kontrollerine ulaşılmadığı için bu kontroller başarısız olmuş sayılmaz. Client Finished gönderimi de atlanır.

    Offer evidence
    Offer h2 / server http/1.1
    Selection evidence
    Client fatal alert aldı; kontroller atlandı
    Peer-gate review
    Application kapalı; client Finished yok
  5. Aynı TCP context’i, negotiation durmuş

    newTcpConnectionCreated=false, ALPN’nin yeni bir TCP connection açmadığını belirtir. TLS negotiation’ın durması mevcut socket’in sonraki işletim sistemi durumunu veya ağdaki hata nedenini tek başına açıklamaz. HTTP exchange bu dalda yoktur.

    Offer evidence
    no_application_protocol / yeni TCP yok
    Selection evidence
    Client fatal alert aldı; kontroller atlandı
    Peer-gate review
    Application kapalı; client Finished yok
  6. Negative dalın kanıtı ve coverage’ı

    Client offer kaydı, server protocol configuration’ı ve aynı connection’a ait endpoint alert sonucu birlikte gerekir. Normal h2 seçimi ayrı bir karşılaştırmadır. Alert kaydı eksikse nedeni tahmin etme; bu semantic örnek gerçek TLS log’u veya HTTP sonucu üretmez.

    Offer evidence
    no_application_protocol / yeni TCP yok
    Selection evidence
    Offer + server policy + endpoint alert gerekir
    Peer-gate review
    ALPN reddedildi; HTTP sonucu verilmedi

UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA

Flight ledger’ını local state’e bağla

CH offer→server local selection→SH client arrival→protected flight receipt→client validation/Finished→server receipt/validation sırasını izle. Encrypted flight arrival’ında henüz peer identity doğrulaması tamamlanmaz.

Server ve client gate’leri aynı adımda değişmez. Sender’da Finished emission ile receiver’da peer Finished verification arasındaki farkı açıkla; scene hiçbir HTTP application exchange’i tamamlamaz.

Offer/selection matrix’ini hesapla

Version/cipher/group kesişimi ile ALPN kesişimini ayrı değerlendir. Server preference içindeki ilk ortak ALPN normalde h2’dir; no-overlap satırında selectedProtocol null kalır.

TLS cipher suite adı certificate key type’ını belirtmez. SNI api.example.org bir DNS routing hint’tir; literal IP veya dotted suffix karşılaştırmasından user yetkisi üretme.

ALPN configuration’a yalnız gerçekten işleyebildiğin application protocol’lerini koy; bağlantıdan sonraki handler seçimini negotiated protocol’e bağla. Örnekte h2 seçildikten sonra aynı connection’a HTTP/1.1 mesajı yazmak bu seçimi uygulamaz. Ortak protocol bulunmayan dalda null sonucu kendi başına başarılı bir fallback’e dönüştürme. Normal h2 seçimini ve no_application_protocol ile application exchange’in başlamadığı dalı birlikte doğrula; SNI’nin doğru route’u seçmesi bu protocol kontrolünün yerine geçmez.

Visibility tablosunda koşulu koru

Ordinary CH/SH açık context’i, sonraki encrypted handshake’i ve accepted ECH Inner korumasını ayrı işaretle. Outer için hidden=false demek bütün Inner alanlarının her deploy’da korunduğunu iddia etmez.

ECH branch config’i preselected’dir; DNS discovery, HPKE ve rejection retry yürütülmez. Current RFC tanımını deploy yaygınlığı veya actual client support ölçümü diye sunma.

ŞİMDİ VAKAYA UYGULA

Negotiation, receipt ve peer acceptance nasıl ayrılır?

Client, SNI ile api.example.org adını ve ALPN ile h2 seçeneğini sunar. Bunlar doğrulanmış peer sonucu değildir. Finished doğrulaması başarısız olduğunda application gate açılmaz; ECH Outer ve traffic metadata ayrıca değerlendirilir.

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 · tls-hello-flight-ledger

Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.

Ham kaydı ve alan açıklamalarını oku
{
  "profile": {
    "transport": "already-established TCP",
    "tlsVersion": "TLS 1.3",
    "currentSpecification": "RFC9846",
    "serverAuthentication": "certificate",
    "clientCertificateRequested": false,
    "pskEarlyDataHrrSelected": false,
    "actualTlsImplementationRun": false
  },
  "clientHello": {
    "supportedVersions": [
      "TLS 1.3"
    ],
    "cipherSuites": [
      "TLS_AES_128_GCM_SHA256"
    ],
    "supportedGroups": [
      "x25519"
    ],
    "keyShareAlias": "client-x25519-public",
    "signatureAlgorithms": [
      "ed25519"
    ],
    "sniDnsName": "api.example.org",
    "alpn": [
      "h2",
      "http/1.1"
    ]
  },
  "serverHello": {
    "supportedVersion": "TLS 1.3",
    "cipherSuite": "TLS_AES_128_GCM_SHA256",
    "selectedGroup": "x25519",
    "keyShareAlias": "server-x25519-public",
    "alpnSelectedInServerHello": false
  },
  "encryptedExtensions": {
    "alpn": "h2",
    "sniAcknowledgementSelected": true,
    "serverNameResponseCarriesHostname": false
  },
  "serverProtectedFlight": [
    "EncryptedExtensions",
    "Certificate",
    "CertificateVerify",
    "server Finished"
  ],
  "certificateChecksSelected": {
    "path": true,
    "referenceHostname": true,
    "certificateVerify": true,
    "serverFinished": true
  },
  "finishedFailure": {
    "path": true,
    "referenceHostname": true,
    "certificateVerify": true,
    "serverFinished": false,
    "clientFinishedSent": false,
    "applicationGateOpen": false
  },
  "peerGates": [
    {
      "after": "SH arrival at client",
      "clientPeerVerified": false,
      "clientApplicationReady": false,
      "serverPeerFinishedVerified": false,
      "serverApplicationReadySelected": false
    },
    {
      "after": "protected server flight receipt",
      "clientPeerVerified": false,
      "clientApplicationReady": false,
      "serverPeerFinishedVerified": false,
      "serverApplicationReadySelected": false
    },
    {
      "after": "client local checks + own Finished emission",
      "clientPeerVerified": true,
      "clientApplicationReady": true,
      "serverPeerFinishedVerified": false,
      "serverApplicationReadySelected": false
    },
    {
      "after": "client Finished receipt at server",
      "clientPeerVerified": true,
      "clientApplicationReady": true,
      "serverPeerFinishedVerified": false,
      "serverApplicationReadySelected": false
    },
    {
      "after": "server local client Finished verification",
      "clientPeerVerified": true,
      "clientApplicationReady": true,
      "serverPeerFinishedVerified": true,
      "serverApplicationReadySelected": true
    }
  ],
  "alpnCases": [
    {
      "case": "normal",
      "client": [
        "h2",
        "http/1.1"
      ],
      "serverPreference": [
        "h2",
        "http/1.1"
      ],
      "selectedProtocol": "h2",
      "serverResponseMessage": "EncryptedExtensions",
      "newTcpConnectionCreated": false
    },
    {
      "case": "alpn-no-overlap",
      "client": [
        "h2"
      ],
      "serverPreference": [
        "http/1.1"
      ],
      "selectedProtocol": null,
      "selectedFatalAlert": "no_application_protocol",
      "newTcpConnectionCreated": false
    }
  ],
  "visibility": {
    "ordinaryClientHelloProtectedByHandshakeKeys": false,
    "ordinaryServerHelloProtectedByHandshakeKeys": false,
    "postServerHelloHandshakeProtected": true,
    "ipTimeSizeFullyHidden": false
  },
  "ech": {
    "specification": "RFC9849",
    "topology": "shared mode: client-facing server is TLS terminator",
    "config": "preconfigured usable teaching alias",
    "publicName": "front.example.org",
    "innerServerName": "api.example.org",
    "clientServerSupportSelected": true,
    "hpkeDecryptionSelected": true,
    "acceptedSelected": true,
    "echAcceptanceVerifiedSelected": true,
    "intendedServiceIdentityVerifiedSelected": true,
    "outerStillPublic": true,
    "actualHpkeOrDnsRun": false,
    "rejectedEchConnectionApplicationUsable": false,
    "retryPolicySimulated": false
  },
  "limits": "Semantic flights only; no key bytes, transcript hash, HPKE, TLS record/message encoding, certificate parser, real network or HTTP exchange."
}
clientHello
Client capability ve routing/protocol teklifleri.
serverHello
Seçilmiş cryptographic context; ALPN burada değildir.
serverProtectedFlight
Record/segment sayısı olmayan handshake message sırası.
peerGates
Receipt ile local validation/completion ayrımı.
ech
Accepted ECH için açık selected config/topology sınırı.

TLS1.3 semantic flight fixture; actual TLS, HPKE, path validator, transcript/record encoder veya network çalıştırılmaz.

İki yanlış kanı

ServerHello gelince server identity doğrulanmıştır.

Key context sağlanır; certificate path/name, CertificateVerify ve Finished doğrulamaları ayrıca gerekir.

TLS1.3 bütün ClientHello alanlarını daima encrypt eder.

Ordinary CH açık context’tedir. ECH, uygun config/support ve acceptance ile Inner alanlarını korur; Outer ve metadata kalır.

SIRA SENDE

Bu hikâyeyi sen çöz.

Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.

ALPN client yalnız h2, server yalnız http/1.1 sunuyor. Bu branch’in sonucu nedir?

  1. no_application_protocol; selectedProtocol=null.
  2. ALPN iki protocol’ü birleştirip yeni TCP connection açar.
Gerekçeli cevabı oku

no_application_protocol; selectedProtocol=null. — Ortak protocol bulunmayan bu fatal branch’te negotiation başarısızdır. Yeni TCP connection oluşturulmaz.

Client Finished server’a ulaştı. serverApplicationReady neden hemen true değil?

Dersten seçilen artifact alanları; öğretim örneği

peerGates[3]
{"after":"client Finished receipt at server","clientPeerVerified":true,"clientApplicationReady":true,"serverPeerFinishedVerified":false,"serverApplicationReadySelected":false}
peerGates[4]
{"after":"server local client Finished verification","clientPeerVerified":true,"clientApplicationReady":true,"serverPeerFinishedVerified":true,"serverApplicationReadySelected":true}
  1. Server ayrıca local Finished verification’ı tamamlamalıdır.
  2. Arrival bütün cryptographic kontrollerin geçtiğini kanıtlar.
Gerekçeli cevabı oku

Server ayrıca local Finished verification’ı tamamlamalıdır. — Receipt snapshot’ta serverPeerFinishedVerified=false. Sonraki yerel kontrol bu koşulu açar.

Bu certificate handshake’te server application koşulu sağlanana kadar adımları sırala.

  1. ServerHello client’a ulaşır.
  2. Protected server flight client’a ulaşır.
  3. Client checks geçer ve kendi Finished mesajını gönderir.
  4. Client Finished server’a ulaşır.
  5. Server local Finished verification geçer.
Gerekçeli cevabı oku

ServerHello client’a ulaşır. → Protected server flight client’a ulaşır. → Client checks geçer ve kendi Finished mesajını gönderir. → Client Finished server’a ulaşır. → Server local Finished verification geçer. — Protected flight’ın alınması henüz peer doğrulaması değildir. Önce client kontrolleri, sonra server’ın kendi Finished verification’ı gerekir. Burada wire encoding değil semantic aşama sırası gösterilir.

SNI=api.example.org ve ALPN=h2 neden certificate hostname doğrulamasının yerine geçmez? Normal Hello görünürlüğünü de açıkla.

Gerekçeli cevabı oku

SNI server context’i için hint verir; ALPN application protocol seçer. Güvenilen path, reference hostname, CertificateVerify ve Finished kontrolleri ayrı authentication koşullarıdır. Normal TLS 1.3 ClientHello/ServerHello handshake key’leriyle gizlenmez. ECH ayrıca negotiated bir context’tir; her TLS connection’da kullanıldığı varsayılamaz.

□ SNI ve ALPN seçimini authentication kanıtı saymadım.

□ Normal Hello ile ECH koşullarını ayırdım.

Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç

Kaynaklar ve kapsam