WEB / WEB-05.03
Handshake, SNI ve ALPN
TLS1.3 flight’larında offer, seçim, validation ve peer-local completion anlarını izle.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
TLS1.3 full flow
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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ı
- 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ı
- 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
- 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
- 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ı
- 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
- 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
- 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ı
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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ı
- 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
- 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
- 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?
- no_application_protocol; selectedProtocol=null.
- 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}
- Server ayrıca local Finished verification’ı tamamlamalıdır.
- 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.
- 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.
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
- TLS 1.3 — current specification (2026)1 Introduction · 1.2 Relationship to RFC8446 · 2 Protocol Overview · 4.2 Hello Messages · 4.3 Extensions · 4.4.1 Encrypted Extensions · 4.5 Authentication Messages · 4.5.1 Certificate · 4.5.2 Certificate Verify · 4.5.3 Finished · 5.2 Record Payload Protection · 5.3 Per-Record Nonce · 7.1 Key Schedule · 7.4.2 Elliptic Curve Diffie-Hellman
- TLS 1.3 — original specification (2018; obsoleted by RFC9846)2 Protocol Overview · 4.4.2 Certificate · 4.4.3 Certificate Verify · 4.4.4 Finished · 5.2 Record Payload Protection
- TLS Extensions — Server Name Indication3 Server Name Indication
- TLS Application-Layer Protocol Negotiation3.1 The ALPN Extension · 3.2 Protocol Selection
- TLS Encrypted Client Hello (2026)1 Introduction · 3.1 Topologies · 3.2 Encrypted ClientHello · 4 Configuration · 6.1.4 Determining ECH Acceptance · 6.1.6 Rejected ECH Connections
- Service Identity in TLS6.1.1 Constructing Reference Identifiers — Rules · 6.2 Preparing to Seek a Match · 6.3 Matching the DNS Domain Name Portion · 6.4 Matching an IP Address Portion · 7.7 Certificate Trust · Appendix A Changes from RFC6125