Transport Layer Security
Protokol Transport Layer Security (TLS) a jeho předchůdce Secure Sockets Layer (SSL) jsou kryptografické protokoly, poskytující možnost zabezpečené komunikace na Internetu pro služby jako WWW, elektronická pošta, internetový fax a další datové přenosy. Mezi protokoly SSL 3.0 a TLS 1.0 jsou drobné rozdíly, ale v zásadě jsou stejné. Zde použitý termín „TLS“ se týká obou dvou, pokud není z kontextu zřejmý opak.

Popis
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:

dohodu účastníků na podporovaných algoritmech
výměnu klíčů založenou na šifrování s veřejným klíčem a autentizaci vycházející z certifikátů
šifrování provozu symetrickou šifrou
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:

pro kryptografii s veřejným klíčem: RSA, Diffie-Hellman, DSA
pro symetrické šifrování: RC2, RC4, IDEA, DES, Triple DES, AES, Camellia
pro jednosměrné hešování: Message-Digest algorithm (MD2, MD4, MD5), Secure Hash Algorithm (SHA-1, SHA-2)
Jak pracuje
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ě:

Klient pošle zprávu ClientHello oznamující nejvyšší verzi TLS, kterou podporuje, náhodné číslo a seznam doporučených šifrovacích sad a kompresních metod.
Server odpoví zprávou ServerHello obsahující zvolenou verzi protokolu, náhodné číslo, šifrovací a kompresní metodu vybranou z klientem nabídnutého seznamu.
Server pošle svůj certifikát (Certificate), pokud to zvolená šifra umožňuje. Současné certifikáty jsou založeny na X.509, ale existuje návrh na používání certifikátů vycházejících z OpenPGP.
Server může pomocí CertificateRequest vyžadovat certifikát od klienta, aby bylo spojení autentizováno vzájemně.
Server pošle zprávu ServerHelloDone, která signalizuje, že ukončil iniciační dohodu na používaných mechanismech.
Klient odpoví zprávou ClientKeyExchange, jež může obsahovat PreMasterSecret, veřejný klíč nebo nic (v závislosti na zvolené šifře).
Klient a server následně z náhodných čísel a PreMasterSecret pomocí pečlivě navržené pseudonáhodné funkce vypočítají „master secret“. Veškeré ostatní klíče jsou odvozeny z něj (a z generovaných náhodných hodnot).
Klient nyní odešle zprávu ChangeCipherSpec, jíž v podstatě sděluje „veškerá další data od mne budou šifrována“. Za pozoronost stojí, že ChangeCipherSpec je sám o sobě protokolem záznamové vrstvy s typem 20, nikoli 22.
Na závěr klient pošle šifrovanou zprávu Finished obsahující hash a MAC předchozích iniciačních zpráv.
Server se pokusí dešifrovat klientovu zprávu Finished a ověřit její hash a MAC. Pokud dešifrování či ověření selže, inicializace je považována za neúspěšnou a spojení by mělo být ukončeno.
Konečně server pošle zprávy ChangeCipherSpec a svou zašifrovanou Finished a klient provede analogické dešifrování a ověření.
V tomto okamžiku je inicializace dokončena a je povolen aplikační protokol, jehož typem obsahu je 23. Aplikační zprávy vyměňované mezi klientem a serverem budou zašifrovány.
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.

Inicializace (handshake) začíná když se klient připojí k serveru používajícímu TLS/SSL a požaduje, aby mu server poslal svou identifikaci.
Server pošle identifikaci v zabezpečené podobě digitálního certifikátu. Certifikát obsahuje (většinou všechny následující proměnné, závisí to však na použitém standardu X.509) jméno serveru, důvěryhodnou certifikační autoritu (CA) a veřejný klíč serveru.
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í.

Z tohoto seznamu server vybere nejsilnější šifrování, které také podporuje a oznámí toto rozhodnutí klientovi.
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.

Tato data klient dokáže zašifrovat, ale pouze server je umí rozšifrovat (pomocí svého soukromého klíče): tímto způsobem zůstane budoucí klíč seance skryt před případným odposlouchávajícím, znají jej pouze server a klient.
Server odpoví dalšími náhodnými daty (která není třeba šifrovat) a následně:
Obě strany nějakým dohodnutým způsobem zkombinují náhodná data od klienta a od serveru. Na takto zkombinovaná náhodná data použijí vybranou hashovací funkci, a tím vytvoří klíč seance, kteří zná jen server a klient.
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í.

Protokol SSL v3 a TLS záznamů
+ 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ě)
Protocol
Tato položka identifikuje typ protokolu vrstvy záznamů obsažený v tomto záznamu.
Dostupné typy protokolů jsou:
20 ChangeCipherSpec
21 Alert
22 Handshake
23 Application
Version
Identifikuje hlavní a dílčí verzi SSL pro obsaženou zprávu. Pro zprávu ClientHello se nemusí jednat o nejvyšší verzi podporovanou klientem.
Verze jsou:
3 | 0 SSLv3
3 | 1 TLS 1.0
3 | 2 TLS 1.1
3 | 3 TLS 1.2
Length
Délka zpráv protokolu. Nesmí překročit 214 bajtů.
Zprávy protokolu
Jedna nebo více zpráv identifikovaných položkou Protocol. Tato položka může být zašifrována v závislosti na stavu spojení.
MAC
Kód ověřující autentičnost zprávy vypočítaný ze Zpráv protokolu doplněné o klíče. Položka může být zašifrována nebo může chybět, opět v závislosti na stavu spojení.
Protokol ChangeCipherSpec
+ bity 0–7 8-15 16-23 24–31
0 20 Version (MSB) Version (LSB) 0
32 1 1 (CCS protocol type)
Protokol Alert
+ bity 0–7 8-15 16-23 24–31
0 21 Version (MSB) Version (LSB) 0
32 2 Level Description
Level
Položka identifikující úroveň výstrahy.
Ú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ě
Description
Identifikuje typ zasílané výstrahy.
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)
Protokol Handshake
+ 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
Message type
Identifikuje typ zprávy.
Dostupné typy jsou:
0 HelloRequest
1 ClientHello
2 ServerHello
11 Certificate
12 ServerKeyExchange
13 CertificateRequest
14 ServerHelloDone
15 CertificateVerify
16 ClientKeyExchange
20 Finished
Message length
Jedná se o tříbajtovou položku obsahující délku handshake dat, hlavička se nepočítá.
Bezpečnost
TLS zahrnuje řadu bezpečnostních opatření:

Klient používá veřejný klíč certifikační autority (CA) k ověření jejího digitálního podpisu v serverovém certifikátu. Lze-li digitální podpis CA ověřit, klient přijme serverový certifikát jako platný certifikát vydaný důvěryhodnou CA.
Klient ověřuje, zda je vydávající certifikační autorita na seznamu důvěryhodných CA.
Klient kontroluje dobu životnosti serverového certifikátu. Autentizační proces se zastaví, pokud doba jeho platnosti vypršela.
K ochraně před útoky typu Man-in-the-Middle porovnává klient aktuální DNS jméno serveru se jménem z certifikátu.
Ochrana před několika známými útoky (včetně Man-in-the-Middle), jako je snaha o použití nižší (méně bezpečné) verze protokolu nebo slabšího šifrovacího algoritmu.
Opatření všech aplikačních záznamů pořadovými čísly a používání těchto čísel v MAC.
Používání ověřovacího kódu zprávy rozšířeného o klíč, takže jen vlastník klíče dokáže MAC ověřit. Definováno v RFC 2104. Jen v TLS.
Zpráva ukončující inicializaci (Finished) obsahuje hash všech zpráv vyměněných v rámci inicializace oběma stranami.
Pseudonáhodná funkce rozděluje vstupní data na poloviny a zpracovává každou z nich jiným hashovacím algoritmem (MD5 a SHA), pak je XORuje dohromady. To poskytuje ochranu, pokud by byla nalezena slabina jednoho z algoritmů. Jen v TLS.
SSL v3 je proti SSL v2 vylepšeno přidáním šifer založených na SHA-1 a podporou autentizace certifikáty. Další vylepšení SSL v3 zahrnují lepší inicializační protokol a vyšší odolnost proti útokům typu man-in-the-middle. V roce 2014 ale většina certifikátů internetových stránek používá (místo SHA-2 či SHA-3) zastaralé a nedostačující SHA-1,[1] které v blízké době nebude podporováno (např. Microsoft je nebude v roce 2017 akceptovat).
Aplikace
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.