Transport Layer Security
Author
Albert FloresProtokol 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. +more 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, SHA-3)
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. +more 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. +more * 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 ode mne budou šifrována“. Za pozornost 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. +more 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. +more 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. +more Na takto zkombinovaná náhodná data použijí vybranou hashovací funkci, a tím vytvoří klíč seance, který 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 | Protocol | Protocol | Protocol | Protocol | Protocol | Protocol | Protocol | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | Length (MSB) | Length (MSB) | Length (MSB) | Length (MSB) | Length (MSB) | Length (MSB) | Length (MSB) | Length (MSB) |
32 | Length (LSB) | Length (LSB) | Length (LSB) | Length (LSB) | Length (LSB) | Length (LSB) | Length (LSB) | Length (LSB) | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu | Zprávy protokolu |
. | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) | Zprávy protokolu (pokračování) |
. +more | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) | MAC (volitelně) |
Protokol ChangeCipherSpec
+ | %"| bity 0-7 | %"| 8-15 | %"| 16-23 | %"| 24-31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
32 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 (CCS protocol type) | 1 (CCS protocol type) | 1 (CCS protocol type) | 1 (CCS protocol type) | 1 (CCS protocol type) | 1 (CCS protocol type) | 1 (CCS protocol type) | 1 (CCS protocol type) |
Protokol Alert
+ | %"| bity 0-7 | %"| 8-15 | %"| 16-23 | %"| 24-31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 21 | 21 | 21 | 21 | 21 | 21 | 21 | 21 | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
32 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | Level | Level | Level | Level | Level | Level | Level | Level | Description | Description | Description | Description | Description | Description | Description | 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 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (MSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | Version (LSB) | Length (MSB) | Length (MSB) | Length (MSB) | Length (MSB) | Length (MSB) | Length (MSB) | Length (MSB) | Length (MSB) |
32 | Length (LSB) | Length (LSB) | Length (LSB) | Length (LSB) | Length (LSB) | Length (LSB) | Length (LSB) | Length (LSB) | Message type | Message type | Message type | Message type | Message type | Message type | Message type | Message type | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length |
64 | Message length (cont. ) | Message length (cont. +more) | Message length (cont. ) | Message length (cont. ) | Message length (cont. ) | Message length (cont. ) | Message length (cont. ) | Message length (cont. ) | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message |
. | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Handshake message | Message type | Message type | Message type | Message type | Message type | Message type | Message type | Message type | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length |
. | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Message length | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | Handhshake message | 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. +more * 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, 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 [url= k vytvoření [[url=HTTPS]url= je 443, aby se odlišil od portu 80 pro obyčejné[/url]url=. Nicméně v roce 1997 [[Internet Engineering Task Force][Hypertext Transfer Protocol|HTTP]], FTP, SMTP, NNTP či XMPP, a nad spolehlivým transportním protokolem, např. +more 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[/url]]. ]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|RFC 3207[/url]]). 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. +more 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[/url]] 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í. +more 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.