CLIENTSERVERClientHello + key shareServerHello + cert + FinishedFinished + first requestTLS 1.3: 1-RTT to first byte

TLS håndtryk

11 min læstKryptografi

Hver HTTPS-forbindelse starter med et håndtryk: en kort udveksling af meddelelser, hvor klienten og serveren er enige om kryptografiske algoritmer, verificerer identiteter og udleder delte krypteringsnøgler. Det hele tager én rundtur i TLS 1.3 og er grundlaget for stort set al krypteret kommunikation på nettet.

Hele artiklens krop findes på engelsk nedenfor.

TLS-håndtryk er protokoludvekslingen, der etablerer en krypteret, autentificeret forbindelse mellem to endepunkter. Den kører i starten af ​​hver HTTPS-anmodning, hver sikker SMTP-session, hvert moderne IMAP-login, hver HTTP/2- og HTTP/3-forbindelse. Den nuværende version, TLS 1.3 (RFC 8446, 2018), er dramatisk enklere og hurtigere end TLS 1.2.

Hvad håndtrykket opnår

Ved slutningen af håndtrykket har begge sider:

  • verificeret via serverens certifikat
  • Aftalt en TLS-version og chifferpakke
  • Afledte delte symmetriske nøgler til sessionen
  • Valgfrit udvekslet godkendelse for klienten (mTLS)
  • Valgfrit signaleret applikations-, HTTPPN-lagdetaljer osv.)

Alle efterfølgende data bruger de symmetriske nøgler (typisk AES-GCM eller ChaCha20-Poly1305) til hurtig bulkkryptering.

TLS 1.3 håndtryk, trin for trin

er Minimum 1 håndtryk i TLC23XXPLZ24. tur-retur:

  1. ClientHello. Klient sender:
    • Understøttede TLS-versioner
    • Cipher-pakker den kan tale
    • Understøttede nøgler,6-c51, 6-c51 osv.)
    • Nøgleandel — dens flygtige offentlige nøgle til nøgleudvekslingen. Dette er TLS 1.3 speedup: i TLS 1.2 ventede nøgleudvekslingen på serverens parametre; TLS 1.3 tager et gæt og sender den offentlige nøgle med det samme.
    • SNI (Server Name Indication) — hvilket værtsnavn klienten ønsker at tale med. Klartekst historisk; Encrypted Client Hello (ECH) ruller ud for at skjule det.
  2. ServerHello. Server sender:
    • Selected TLS version and cipher suite
    • XPLZ
    • Its alting beskeden på PLZFZ51XIts nøgle server, der sender, er krypteret
    • Dens certifikatkæde (krypteret under håndtryksnøglerne)
    • A signatur, der beviser, at den har den private nøgle, der matcher certifikatet
    • Finished-meddelelse, der bekræfter, at begge sider har samme håndtryk-transcript
    • XXPL4ClXXZPL6cient sender Finished. Anerkender serverens meddelelser og skifter til at bruge de afledte applikationsnøgler.
    • Application data. Den første HTTP-anmodning flyder.

Nettopris: 1 applikation tur/retur før første gang. Med 0-RTT (en TLS 1.3-funktion, der bruger cachelagrede sessionsnøgler fra en tidligere forbindelse), kan den første anmodning køre i selve ClientHello - nul rundrejser for genoptaget sessioner.

TLS 1.2 var langsommere

TLS 1.2's håndtryk tog 2 rundrejser:

  1. ClientHello (ingen nøgledeling endnu)
  2. ServerHello + Certificate + ServerKeyExchange + ServerHelloDone
  3. ClientKeyExchange + ChangeCipherSpec+ChangeCipherSpec8X4SpechangeCPLZCZ5X4SpechangeCPLZCZ5X4SpechangeCPLZCZ5 Færdig
  4. Applikationsdata

2-tur-tur-omkostningerne betød mest på netværk med høj latenstid. TLS 1.3's 1-RTT (eller 0-RTT) håndtryk har været en af de større brugeropfattelige forbedringer af webydeevnen i det sidste årti.

Hvad bliver forhandlet

De vigtigste felter:

    XXLS version. 1.3 i praksis. SSL 3.0, TLS 1.0, 1.1 er forældet.
  • Cipher suite. Specificerer den symmetriske chiffer (AES-128-GCM, AES-256-GCM, ChaCha20-Poly136,S), the-HA250-funktionen (S) SHA-384), og (i TLS 1.2) nøgleudvekslingsmekanismen. TLS 1.3 adskiller disse.
  • Nøgleudvekslingsgruppe. X25519, secp256r1, secp384r1 osv. ECC er standard; RSA-nøgleudveksling er fjernet i 1.3.
  • Signaturalgorithm. RSA-PSS, ECDSA, Ed25519. Serverens certifikatsignatur bruger en af disse.
  • Extensions. SNI, ALPN, Early Data, supported_versions, key_share, padding, og mange flere.

Forward secrecyXPLZ10 mandates111XXLSPLZ10 kortvarig nøgleudveksling — hver session udleder nøgler fra friske flygtige nøgler, der kasseres umiddelbart efter. Hvis serverens langsigtede private nøgle lækker i morgen, er trafik, der fanges i dag, stadig beskyttet (forudsat at lækagen ikke inkluderer de flygtige nøgler, som typisk aldrig vedvarer).

TLS 1.2 gjorde dette valgfrit via DHE/ECDHE-cifre; mange servere aktiverede det, men nogle gjorde det ikke. TLS 1.3 gør det ikke-omsætteligt.

Certifikatvalidering

Serveren beviser sin identitet ved at sende en certifikatkæde. Klienten kontrollerer:

  • Bladcertifikatets navn svarer til den vært, der er forbundet til
  • Certifikatet er i dato
  • Hvert certifikat i kæden er underskrevet af den næste
  • Roden er i den lokale tillidsbutik
  • Certifikat Gennemsigtighedslogfiler inkluderer certifikatet (moderne browsercertifikat)ZPLZ0XXn tilbagekaldt (CRL, OCSP eller moderne ækvivalenter som CRLite)

Hvis en kontrol mislykkes, viser browseren en advarsel. Se vores CA-artikel for det bredere billede.

0-RTT og genafspil risk

TLS 1.3's 0-RTT-tilstand lader en tilbagevendende klient sende applikationsdata i sin første pakke ved hjælp af nøgler, der stammer fra en tidligere session. Afvejningen: en angriber, der fanger 0-RTT-dataene, kan afspille dem igen senere. For idempotente operationer (GET-anmodninger om cachebart indhold) er dette fint. For ikke-idempotente operationer (tilstandsændrende POST'er) er 0-RTT usikker. De fleste browsere og CDN'er håndterer dette med omhu; servere kan afvise 0-RTT for specifikke operationer.

Ofte stillede spørgsmål

Hvor lang tid tager et TLS-håndtryk egentlig?
På en typisk forbindelse: TLS 1.3 tilføjer ca. 100 ms (én rundtur) oven på TCP-håndtrykket. TLS 1.2 tilføjer omkring 200 ms (to rundrejser). 0-RTT tilføjer 0 ms, når det er relevant. Efterfølgende anmodninger på den samme forbindelse gentager ikke håndtrykket.
Hvorfor bruger TLS nogle gange ChaCha20 i stedet for AES?
ChaCha20-Poly1305 er hurtigere end AES på hardware uden AES-NI-acceleration (ældre mobile CPU'er, simple ARM-kerner, IoT-enheder). Når klienten signalerer, at den ikke understøtter AES-acceleration effektivt, foretrækker serveren ChaCha20. På moderne x86 og ARM med AES-NI er AES normalt lidt hurtigere.
Hvad er gensidig TLS (mTLS)?
Standard TLS-håndtryk godkender kun serveren. I mTLS præsenterer klienten også et certifikat, og serveren verificerer det. Bruges til API-sikkerhed, service-to-service-godkendelse, Zero Trust-arkitekturer. Tilføjer operationel kompleksitet, men giver kryptografisk klientidentitet.
Krypterer TLS destinationsværtsnavnet?
Indtil for nylig, nej - SNI-feltet var klartekst, synligt for enhver observatør på vej. Encrypted Client Hello (ECH) skjuler SNI ved at kryptere ClientHello til en nøgle offentliggjort i DNS. ECH understøttes af Chrome, Firefox og Cloudflare; bredere adoption ruller ud gennem 2025-2026.
Hvad sker der, hvis en server ikke understøtter TLS 1.3?
Håndtrykket falder tilbage til TLS 1.2. Moderne browsere nægter TLS 1.0 og 1.1 helt fra 2020-2021. TLS 1.2 er acceptabel, men langsommere; 1.3 foretrækkes og nu er størstedelen af ​​nye håndtryk.
TLS-håndtryk forklaret: Hvad sker der før HTTPS sender data