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 ideje |
Szabvány definíciója
|
SSL 1.0 |
Sosem tették közzé |
-
|
SSL 2.0 |
1995. február |
-
|
SSL 3.0 |
1996 |
-
|
TLS 1.0 (SSL 3.1) |
1999. január |
RFC2246
|
TLS 1.1 (SSL 3.2) |
2006. április |
RFC4346
|
TLS 1.2 (SSL 3.3) |
2008. augusztus |
RFC5246
|
TLS 1.3
|
2018. március
|
RFC-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 +0
|
Byte +1
|
Byte +2
|
Byte +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
Hex
|
Dec
|
Type
|
0x14
|
20
|
ChangeCipherSpec
|
0x15
|
21
|
Figyelmeztetés
|
0x16
|
22
|
Handshake
|
0x17
|
23
|
Alkalmazá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
|
3 |
0 |
SSL 3.0
|
3 |
1 |
TLS 1.0
|
3 |
2 |
TLS 1.1
|
3 |
3 |
TLS 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