Transport Layer Security

A Transport Layer Security (TLS) és elődje, a Secure Sockets Layer (SSL), titkosítási protokollok, melyek az Interneten keresztüli kommunikációhoz biztosítanak védelmet. A TLS és SSL protokollok titkosítják a hálózati kapcsolatok szegmenseit a szállítási réteg felett.

A TLS egy IETF szabványt követő protokoll, amely a korai, Netscape Communications által meghatározott SSL specifikációkon alapul. Utolsó verzióját az IEEE RFC8446-os referenciájában definiálták.

Különböző változatait rengeteg alkalmazásban felhasználják, mint például levelezés, webböngészés, azonnali üzenetküldés, vagy esetleg VoIP (Voice over IP) kommunikáció területén.

Leírás

A TLS protokoll kliens/szerver alapú alkalmazások számára lehetővé teszi a biztonságos kommunikációt, elhárítva a lehallgathatóságot és az esetleges hamisítást. Amióta a legtöbb protokoll használható TLS-sel vagy anélkül, fontos, hogy a szerver felé jelezze a kliens, hogy használ-e TLS-t. Ezt kétféleképpen érhetjük el: Egyik lehetséges mód, hogy a TLS kapcsolatoknál külön portot használunk (például HTTPS-hez 443-as portot). A másik lehetőség, hogy a szokásos, szabványos portot vesszük igénybe, és a kliens kéri a szervert, hogy a meglévő kapcsolatnál használja fel a TLS-t is valamilyen protokoll-specifikus mechanizmus segítségével.

Amint eldőlt, hogy a szerver és a kliens TLS-t használnak, kapcsolódnak egy handshake procedúrán keresztül végigmenve. Ezalatt a kliens és a szerver bizonyos paraméterek összehangolásával biztonságos kapcsolatot létesít egymás közt.

  • A kézfogás azzal indul, hogy a kliens egy TLS-sel ellátott szerverhez kérelmet küldve próbál biztonságos kapcsolatot létesíteni, és egy listát biztosít a szerver számára a felhasználható titkosítási módszerekkel és hash függvényekkel.
  • Ebből a listából a szerver a legerősebbeket kiválasztja.
  • A szerver elküldi a digitális aláírását, ami a szerver nevéből, egy tanúsítványból és a szerver nyilvános kulcsából áll.
  • A kliens ezután csatlakozhat, és elkészít munkafolyamat-azonosító kulcsot (session key). Egy ilyen kulcs előállításához a kliens vesz egy véletlen számot, amit titkosít a szerver nyilvános kulcsával együtt és ennek eredményét visszaküldi a szerver számára, amit kizárólag a szerver képes dekódolni a titkos kulcsa segítségével.

Ha a fenti folyamat során valamely lépés nem sikeres, a kézfogás sikertelen lesz és a kapcsolat nem jön létre.

Fontosabb verziói

Kezdet

A szállítási réteg biztosítására tett korai kezdeményezések egyik eredménye volt az SNP (Secure Network Programming) API, amelyet 1993-ban dolgoztak ki.

További változatok

VerzióKiadás idejeSzabvány definíciója
SSL 1.0Sosem tették közzé-
SSL 2.01995. február-
SSL 3.01996-
TLS 1.0 (SSL 3.1)1999. januárRFC2246
TLS 1.1 (SSL 3.2)2006. áprilisRFC4346
TLS 1.2 (SSL 3.3)2008. augusztusRFC5246
TLS 1.32018. márciusRFC-TLS13-28

Felhasználási területei

Általánosságban

A TLS egyik legfontosabb alkalmazási területe a világhálón való böngészés biztosítása (http és https protokollokon keresztül), azon belül az e-kereskedelem, banki szolgáltatások és az elektronikus levelezés. A levélküldésnél használt protokoll, az SMTP (Simple Mail Transfer Protocoll) is a TLS-t alkalmazza.

Néhány példa

Vegyünk néhány webböngészőt:

  • Mozilla Firefox legfrissebb verziói már támogatják a TLS 1.2 és 1.3 verzióit is. Ezek mellett a TLS 1.0 és 1.1 támogatást már elkezdték kivezetni.
  • A Google Chrome a Firefox-hoz hasonlóan a TLS 1.1 és 1.2 verzióját is támogatja.[1]
  • A Google Chrome 2017-ben egy rövid időre alapértelmezetté tette a TLS 1.3 verzióját, majd az alapértelmezett státuszt később visszavonta számos dologgal szembeni inkompatibilitás miatt.
  • Microsoft Internet Explorer mindig az alatta futó Windows operációs rendszerre implementált TLS-t használja egy SChannel Security Service Provider nevű szolgáltatáson keresztül. Az Internet Explorer 8 Windows 7 és Windows Server 2008 R2 alatt már támogatja a TLS 1.2-t.[2]
  • Apple Safari szintén támogatja a TLS szabványt, a konkrét támogatott verzió az alatta futó operációs rendszertől függ.[3]

Biztonság

TLS handshake részletesebben

A TLS protokoll egységbezárt adatok, úgynevezett rekordok segítségével kommunikál. Minden egyes rekord tömöríthető, kiegészíthető ún. üzenet azonosító kóddal (MAC - Message Authentication Code), vagy akár titkosítható is, mindez a kapcsolat aktuális állapotától függ. Minden rekord tartalmaz egy tartalom típus, hossz és TLS verzió mezőket. Amikor a kapcsolódás megtörténik, a rekord egységbezár egy másik protokollt (a handshake üzenetküldési protokollt), aminek a tartalomtípusa a 22-es számmal van ellátva.

Egy egyszerűbb handshake folyamat

1. Tárgyalási fázis

  • A kliens egy ClientHello üzenetet küld a szerver számára, néhány plusz kéréssel együtt, amit a szervertől vár válaszként: a legnagyobb támogatott TLS verziót, egy véletlen számot, egy titkosítási módszert, és egy ajánlott tömörítési eljárást.
  • A szerver egy ServerHello üzenettel válaszol a kliensnek és továbbítja az előbbiekben felsorolt kéréseket. A választott protokoll a kliens és a szerver által egyaránt támogatott legújabb verziójú protokoll. Például: Ha a kliens a TLS 1.1-et támogatja, a szerver a TLS 1.2-t is, akkor az 1.1-es verzió lesz kiválasztva. SSL 3.0 nem választható.
  • A szerver ezután egy Certificate üzenetet küld(a titkosítási módszertől függően ezt a szerver kihagyhatja).
  • A szerver következik ismét: ServerHelloDone üzenet formájában jelzi a kliens fele, hogy a handshake tárgyalási folyamatát lezárja.
  • A kliens ClientKeyExchange üzenettel válaszol, ami tartalmazhat egy PreMasterSecret-et, vagy egy nyilvános kulcsot, vagy semmit se. Ez a PreMasterSecret titkosítva van a szerver nyilvános kulcsa által.
  • A kliens és a szerver a véletlenszámok és a PreMasterSecret segítségével előállítja a privát kulcsokat.

2. A kliens egy ChangeCipherSpec rekordot küld a szervernek, jelezve fele, hogy "minden amit innentől mondok, titkosítva lesz". Ez a rekord a 20-as tartalom típussal van ellátva.

  • Végül, a kliens küld egy Finished üzenetet, ami egy hash-t és egy MAC-et tartalmaz az előző üzenetekből.

3. A szerver is küld a kliens részére egy ChangeCipherSpec üzenetet.

4. Alkalmazási fázis: ezen a ponton a "handshake" véget ér, az alkalmazási protokoll engedélyezve van.

TLS rekord felépítése

Az alábbi táblázat segítségével szemléltethető a TLS rekordok szerkezete.

+Byte +0Byte +1Byte +2Byte +3
Byte
0
Tartalom típusa 
Byte-ok
1..4
VerzióHossz
(Major)(Minor)(bit-ek 15..8)(bit-ek 7..0)
Byte-ok
5..(m-1)
Protokoll üzenet(ek)
Byte-ok
m..(p-1)
MAC (opcionális)
Byte-ok
p..(q-1)
Kitöltés
Tartalom típus
Ez a mező határozza meg a rekordban szereplő tartalom típusát.
Tartalom típusok
HexDecType
0x1420ChangeCipherSpec
0x1521Figyelmeztetés
0x1622Handshake
0x1723Alkalmazás
Verzió
Ez a mező határozza meg az üzenethez használandó TLS protokoll elsődleges(major) és másodlagos(minor) verzióját.
Verziók
Major
Verzió
Minor
Verzió
Verzió típusa
30SSL 3.0
31TLS 1.0
32TLS 1.1
33TLS 1.2
TLS 1.3
Hossz
Az üzenet hosszát definiálja, amely nem lépheti túl a 214 byte-ot (16 KiB).

Kapcsolódó szabványok

A legújabb a TLS 1.3, amely 2018 márciusában jelent meg.

Jegyzetek

Külső hivatkozások