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

TLS Handshake

11 min lukeaKryptografia

Jokainen HTTPS-yhteys alkaa kättelyllä: lyhyt viestien vaihto, jossa asiakas ja palvelin sopivat salausalgoritmeista, vahvistavat henkilöllisyydet ja johtavat jaetut salausavaimet. Koko asia kestää yhden edestakaisen matkan TLS 1.3:ssa ja on käytännössä kaiken salatun verkon perusta.

Artikkelin koko runko on englanniksi alla.

TLS handshake on protokollakeskus, joka muodostaa salatun, todennetun yhteyden kahden päätepisteen välille. Se suoritetaan jokaisen HTTPS-pyynnön, jokaisen suojatun SMTP-istunnon, jokaisen nykyaikaisen IMAP-sisäänkirjautumisen, jokaisen HTTP/2- ja HTTP/3-yhteyden alussa. Nykyinen versio, TLS 1.3 (RFC 8446, 2018), on dramaattisesti yksinkertaisempi ja nopeampi kuin TLS 1.2.

Mitä kättelyllä saavutetaan

Kättelyn lopussa molemmilla osapuolilla on:

    XPLZ'11XXXAvarmenteen kautta TLS-versiossa ja salauspaketissa
  • Johdetut jaetut symmetriset avaimet istunnolle
  • Valinnaisesti vaihdettu todennus asiakkaalle (mTLS)
  • Valinnaisesti signaloidut sovellustason tiedot (ALPN: mikä versio symmetriset avaimet (yleensä AES-GCM tai ChaCha20-Poly1305) nopeaa joukkosalausta varten.

    TLS 1.3 kättely, askel askeleelta

    TLS 1.3:n pienin kättely on 1 meno-paluu:

    1. ClientHello. Asiakas lähettää:
      • Tuetut TLS-versiot
      • Salakirjoitusohjelmat se voi puhua
      • Supge19 (avain25portti1 secp256r1 jne.)
      • Key share — sen lyhytaikainen julkinen avain avainten vaihtoa varten. Tämä on TLS 1.3 speedup: TLS 1.2:ssa avaimenvaihto odotti palvelimen parametreja; TLS 1.3 arvaa ja lähettää julkisen avaimen välittömästi.
      • SNI (Server Name Indication) — mille isäntänimelle asiakas haluaa puhua. Selkeä teksti historiallisesti; Encrypted Client Hello (ECH) on tulossa piilottamaan sen.
    2. ServerHello. Palvelin lähettää:
      • Valittu TLS-versio ja salauspaketti on kaikki palvelimen lähettämä on salattu
      • Isen varmenneketju (salattu kättelyavaimilla)
      • Allekirjoitus, joka osoittaa, että sillä on varmennetta vastaava yksityinen avain
      • Valmis viesti, joka vahvistaa, että molemmilla puolilla on sama kättely transcript
    3. Client lähettää Finished. Kuittaa palvelimen viestit ja siirtyy käyttämään johdettuja sovellusavaimia.
    4. Sovellustiedot.Sovellustiedot.Sovellustiedot. Ensimmäinen HTTP7-pyyntö7 NePLZ XX. hinta: 1 edestakainen matka ennen ensimmäistä sovellustavua. 0-RTT:n (TLS 1.3:n ominaisuus, joka käyttää aikaisemman yhteyden välimuistiin tallennettuja istuntoavaimia) avulla ensimmäinen pyyntö voi kulkea itse ClientHellossa – nolla edestakaista matkaa jatkuville istunnoille.

      TLS 1.2 oli hitaampi

      TLS kesti 1,2'2 kättä edestakaiset matkat:

      1. ClientHei (ei vielä avainjakoa)
      2. ServerHello + Certificate + ServerKeyExchange + ServerHelloDone
      3. ClientKeyExchange + ChangeCipherSpec + ChangeCipherSpec + FinishedXPLZpher8C4XXeZPLZpher8X Valmis
      4. Sovellustiedot

      Kahden edestakaisen matkan hinnalla oli eniten merkitystä korkean viiveen verkoissa. TLS 1.3:n 1-RTT (tai 0-RTT) kättely on ollut yksi suurimmista käyttäjien havaittavista verkkosuorituskyvyn parannuksista viime vuosikymmenellä.

      Mistä neuvotellaan

      Pääkentät:

      • XS versio.9 PLX tai.9 PLZX 98ZXTLXS versio.9. 1.3 käytännössä. SSL 3.0, TLS 1.0, 1.1 ovat vanhentuneita.
      • Cipher Suite. Määrittää symmetrisen salauksen (AES-128-GCM, AES-256-GCM, ChaCha20-Poly2h5,5-funktion) SHA-384) ja (TLS 1.2:ssa) avaimenvaihtomekanismi. TLS 1.3 erottaa nämä.
      • Avainvaihtoryhmä. X25519, secp256r1, secp384r1 jne. ECC on oletusarvo; RSA-avaimen vaihto poistetaan 1.3.
      • Signature-algoritmissa. RSA-PSS, ECDSA, Ed25519. Palvelimen varmenteen allekirjoitus käyttää jotakin näistä.
      • Extensions. SNI, ALPN, Early Data, supported_versions, key_share, padding ja paljon muuta.

      XTLZ1 sek. 1.3 edellyttää lyhytaikaisten avainten vaihtoa — jokainen istunto johtaa avaimet uusista lyhytaikaisista avaimista, jotka hylätään välittömästi sen jälkeen. Jos palvelimen pitkäaikainen yksityinen avain vuotaa huomenna, tänään kaapattu liikenne on edelleen suojattu (olettaen, että vuoto ei sisällä lyhytaikaisia ​​avaimia, joita ei yleensä säilytetä koskaan).

      TLS 1.2 teki tästä valinnaisen DHE/ECDHE-salauksen kautta; monet palvelimet ottivat sen käyttöön, mutta jotkut eivät. TLS 1.3 tekee siitä ei-neuvottelukelpoisen.

      Varmenteen validointi

      Palvelin todistaa henkilöllisyytensä lähettämällä varmenneketjun. Asiakas tarkistaa:

      • Lehden varmenteen nimi vastaa isäntää, johon yhdistetään
      • Varmenteen päivämäärä on
      • Jokaisen ketjun varmenteen on allekirjoittanut seuraava
      • Juuri on paikallisessa luottamussäilössä
      • Certificate Avoimuuslokit sisältävät sertifikaatinPLZnxxxxxx peruutettu (CRL, OCSP tai nykyaikaiset vastaavat, kuten CRLite)

      IJos jokin tarkistus epäonnistuu, selain näyttää varoituksen. Katso laajempi kuva CA-artikkelistamme.

      0-RTT ja toistoriski

      TLS 1.3:n 0-RTT-tila antaa palaavan asiakkaan lähettää sovellustietoja ensimmäisessä paketissaan käyttämällä edellisestä istunnosta saatuja avaimia. Kompromissi: 0-RTT-tiedot kaappaava hyökkääjä voi toistaa ne myöhemmin. Idempotentille toiminnalle (GET-pyynnöt välimuistiin tallennettavalle sisällölle) tämä on hyvä. Ei-idempotenttien toimintojen (tilaa muuttavan POST:n) yhteydessä 0-RTT ei ole turvallinen. Useimmat selaimet ja CDN:t käsittelevät tätä huolellisesti; palvelimet voivat kieltäytyä 0-RTT:stä tietyille toiminnoille.

Usein kysytyt kysymykset

Kuinka kauan TLS-kättely todella kestää?
Tyypillisessä yhteydessä: TLS 1.3 lisää noin 100 ms (yksi edestakainen matka) TCP-kättelyn päälle. TLS 1.2 lisää noin 200 ms (kaksi edestakaista matkaa). 0-RTT lisää tarvittaessa 0 ms. Saman yhteyden myöhemmät pyynnöt eivät toista kättelyä.
Miksi TLS käyttää joskus ChaCha20:tä AES:n sijaan?
ChaCha20-Poly1305 on nopeampi kuin AES laitteistossa ilman AES-NI-kiihdytystä (vanhemmat mobiilisuorittimet, yksinkertaiset ARM-ytimet, IoT-laitteet). Kun asiakas ilmoittaa, ettei se tue AES-kiihdytystä tehokkaasti, palvelin valitsee ChaCha20:n. Nykyaikaisissa x86- ja ARM-malleissa, joissa on AES-NI, AES on yleensä hieman nopeampi.
Mikä on keskinäinen TLS (mTLS)?
Tavallinen TLS-kättely todentaa vain palvelimen. mTLS:ssä asiakas esittää myös varmenteen ja palvelin varmistaa sen. Käytetään API-suojaukseen, palveluiden väliseen todentamiseen ja Zero Trust -arkkitehtuureihin. Lisää toiminnallista monimutkaisuutta, mutta tarjoaa salatun asiakasidentiteetin.
Salaako TLS kohdepalvelimen nimen?
Viime aikoihin asti ei – SNI-kenttä oli pelkkä teksti, joka näkyi kaikille polulla oleville tarkkailijoille. Encrypted Client Hello (ECH) piilottaa SNI:n salaamalla ClientHellon DNS:ssä julkaistuun avaimeen. ECH:ta tukevat Chrome, Firefox ja Cloudflare; laajempi käyttöönotto on tulossa vuosille 2025–2026.
Mitä tapahtuu, jos palvelin ei tue TLS 1.3:a?
Kättely palautuu TLS 1.2:een. Nykyaikaiset selaimet kieltävät TLS 1.0:n ja 1.1:n kokonaan vuosina 2020–2021. TLS 1.2 on hyväksyttävä, mutta hitaampi; 1.3 on parempi ja nyt suurin osa uusista kättelyistä.
TLS-kättelyn selitys: Mitä tapahtuu ennen kuin HTTPS lähettää tietoja