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 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.
- TLS 1.3 RFC8446
- TLS 1.2 RFC5246
- TLS 1.1 RFC4346
- TLS 1.0 RFC2246
Jegyzetek
Külső hivatkozások
- IETF TLS munkacsoportjának weblapja
- HUP (Hungarian Unix Portal) magyar nyelvű leírása a TLS-ről
Informatikai portál • összefoglaló, színes tartalomajánló lap