Protokol Transport Layer Security (TLS) je kryptografický protokol poskytující možnost zabezpečené komunikace přes nedůvěryhodnou síť (datová linka, internet). Je využíván pro služby WWW, elektronickou poštu a další datové přenosy. Protokol TLS poskytuje zabezpečení, soukromí (důvěrnost), integritu a autenticitu dvou komunikujících stran pomocí kryptografie, kde využívá digitální certifikáty. TLS byl poprvé publikován IETF (Internet Engineering Task Force) v roce 1999, aktuální verze je TLS 1.3 ze srpna 2018. TLS nahrazuje všechny dnes již zastaralé protokoly SSL (Secure Sockets Layer z let 1994, 1995, 1996), které původně vyvinula společnost Netscape Communications a začlenila tak nový protokol HTTPS do svého webového prohlížeče Netscape Navigator.
Někdy je označení „TLS“ používáno i pro SSL. V březnu 2011 byla v RFC 6176 ukončena zpětná kompatibilita TLS se SSL. Za zastaralé byly verze TLS 1.0 a 1.1 označeny firmami Google, Apple, Microsoft a Mozilla v březnu 2020,[1] formálně pak o rok později v RFC 8996. Verze 1.2 ani 1.3 nemají zatím stanoven datum zastarání.
Protokol(y) TLS umožňují aplikacím komunikovat po síti způsobem, který zabraňuje odposlouchávání či falšování zpráv. Pomocí kryptografie poskytuje TLS svým koncovým bodům autentizaci a soukromí při komunikaci Internetem. Typicky je autentizován pouze server (tedy jeho totožnost je zaručena), zatímco klient zůstává neautentizován. To znamená, že koncový uživatel (ať člověk či aplikace, jako třeba webový prohlížeč) si může být jist, s kým komunikuje. Další úroveň zabezpečení – při níž oba konce „konverzace“ mají jistotu, s kým komunikují – je označována jako vzájemná autentizace. Vzájemná autentizace vyžaduje nasazení infrastruktury veřejných klíčů (PKI) pro klienty.
TLS zahrnuje tři základní fáze:
Během první fáze se klient a server dohodnou na používaných kryptografických algoritmech. Současné implementace podporují následující možnosti:
Protokol TLS je založen na výměně záznamů. Každý záznam může být volitelně komprimován, může k němu být připojen autentizační kód (message authentication code, MAC) a může být zašifrován. Každému záznamu je přiřazen typ obsahu, který určuje protokol vyšší úrovně.
Při zahájení spojení vrstva záznamů obaluje jiný protokol – iniciační protokol (handshake protocol), jehož typ obsahu má hodnotu 22.
Typická inicializace probíhá následovně:
Dát si dohromady výše popsaný proces spojování TLS/SSL s typickým použitím prohlížeče může být poněkud obtížné. Pomozme si v lepším pochopení typického TLS/SSL spojení tím, co bývá obvykle označováno za šestikrokový SSL proces. SSL naváže stavové spojení dohodnuté výše popsanou iniciační procedurou mezi klientem a serverem. Během inicializace si oba vymění specifikace pro šifrování, které budou při komunikaci používat.
Prohlížeč může kontaktovat důvěryhodnou CA a ověřit pravost certifikátu, než bude pokračovat. Následně prohlížeč nabídne seznam šifrovacích algoritmů a hashovacích funkcí.
K vygenerování klíčů seance použitých pro zabezpečení spojení použije prohlížeč veřejný klíč serveru z certifikátu. Zašifruje jím náhodná data a zašle je serveru.
Tím končí handshake a začíná zabezpečené spojení, které je šifrováno a dešifrováno klíči seance po zbytek svého trvání.
Pokud je libovolný z těchto kroků neúspěšný, selže TLS/SSL handshake a nedojde k vytvoření spojení.
+ | bity 0–7 | 8–15 | 16–23 | 24–31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Protocol | Version (MSB) | Version (LSB) | Length (MSB) | ||||||||||||||||||||||||||||
32 | Length (LSB) | Zprávy protokolu | ||||||||||||||||||||||||||||||
... | Zprávy protokolu (pokračování) | |||||||||||||||||||||||||||||||
... | MAC (volitelně) |
Dostupné typy protokolů jsou: 20 ChangeCipherSpec 21 Alert 22 Handshake 23 Application
Verze jsou: 3 | 0 SSLv3 3 | 1 TLS 1.0 3 | 2 TLS 1.1 3 | 3 TLS 1.2 3 | 4 TLS 1.3
+ | bity 0–7 | 8–15 | 16–23 | 24–31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 20 | Version (MSB) | Version (LSB) | 0 | ||||||||||||||||||||||||||||
32 | 1 | 1 (CCS protocol type) |
+ | bity 0–7 | 8–15 | 16–23 | 24–31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 21 | Version (MSB) | Version (LSB) | 0 | ||||||||||||||||||||||||||||
32 | 2 | Level | Description |
Úrovně jsou: 1 Varování – spojení nebo bezpečnost mohou být nestabilní 2 Fatální – spojení nebo bezpečnost mohou být kompromitovány nebo došlo k nenapravitelné chybě
Dostupné popisy jsou: 0 Close notify 10 Unexpected message (fatal) 20 Bad record MAC (fatal) 21 Decryption failed (fatal, TLS only) 22 Record overflow (fatal, TLS only) 30 Decompression failure (fatal) 40 Handshake failure (fatal) 41 No certificate (SSL v3 only) 42 Bad certificate 43 Unsupported certificate 44 Certificate revoked 45 Certificate expired 46 Certificate unknown 47 Illegal parameter (fatal) 48 Unknown CA (fatal, TLS only) 49 Access denied (fatal, TLS only) 50 Decode error (fatal, TLS only) 51 Decrypt error (TLS only) 60 Export restriction (fatal, TLS only) 70 Protocol version (fatal, TLS only) 71 Insufficient security (fatal, TLS only) 80 Internal error (fatal, TLS only) 90 User cancelled (fatal, TLS only) 100 No renegotiation (warning, TLS only)
+ | bity 0–7 | 8–15 | 16–23 | 24–31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 22 | Version (MSB) | Version (LSB) | Length (MSB) | ||||||||||||||||||||||||||||
32 | Length (LSB) | Message type | Message length | |||||||||||||||||||||||||||||
64 | Message length (cont.) | Handshake message | ||||||||||||||||||||||||||||||
... | Handshake message | Message type | Message length | |||||||||||||||||||||||||||||
... | Message length | Handhshake message |
Dostupné typy jsou: 0 HelloRequest 1 ClientHello 2 ServerHello 11 Certificate 12 ServerKeyExchange 13 CertificateRequest 14 ServerHelloDone 15 CertificateVerify 16 ClientKeyExchange 20 Finished
TLS zahrnuje řadu bezpečnostních opatření:
TLS běží ve vrstvě pod aplikačními protokoly, jako jsou HTTP, FTP, SMTP, NNTP či XMPP, a nad spolehlivým transportním protokolem, např. TCP. Dokáže přidat zabezpečení libovolnému protokolu používajícímu spolehlivá spojení (např. pomocí TCP), nicméně nejčastěji se používá pro HTTP k vytvoření HTTPS. Jeho prostřednictvím jsou zabezpečeny webové aplikace, jako je elektronická komerce či správa aktiv. Míra využití TLS v SMTP také roste (je definována v RFC 3207). Tyto aplikace využívají k ověření identity koncových bodů certifikáty s veřejnými klíči.
Počet serverů a klientů nativně podporujících TLS stále roste, nicméně v řadě z nich podpora stále chybí. Jako alternativu mohou uživatelé použít samostatné TLS produkty, jako je Stunnel. Obalové mechanismy jako Stunnel stavějí na schopnosti získat TLS spojení přímo jednoduchým připojením na samostatný port vyhrazený pro tento účel. Například implicitní TCP port pro HTTPS je 443, aby se odlišil od portu 80 pro obyčejné HTTP. Nicméně v roce 1997 Internet Engineering Task Force doporučilo, aby aplikační protokoly vždy zahajovaly činnost bez zabezpečení a místo samostatných portů nabídly způsob pro přechod na TLS. S tím se jednoduché balení aplikačních dat do TLS, jaké používá Stunnel, nedokáže vypořádat.
TLS lze také použít pro tunelování všech síťových protokolů a vytvoření VPN, jak to dělá OpenVPN. Řada výrobců v současnosti spojuje šifrovací a autentizační mechanismy TLS s autorizací. Koncem 90. let bylo vynaloženo značné úsilí na vývoj klientských technologií mimo prohlížeč, které by podporovaly aplikace typu klient/server. V porovnání s tradičními VPN technologiemi na bázi IPsec má TLS některé principiální výhody při procházení firewally a NAT, které usnadňují správu při větším počtu vzdálených uživatelů.
TLS se také ve stále větší míře používá jako standardní metoda ochrany SIP signalizace v aplikacích. TLS dokáže poskytnout autentizaci a šifrování pro SIP signalizaci spojenou s VoIP a dalšími aplikacemi.