TLS Handshake Protocol
Zajišťuje veškeré vyjednání služeb, které požadujeme po TLS. Pomocí
tohoto protokolu se počítače identifikují a dohodnou
na způsobu komunikace. TLS Handshake protokol tvoří
tři subprotokoly:
- Alert protokol
- Change Cipher Spec protokol
- Handshake protokol
Alert protokol
Je to množina zpáv pro vyšší vrstvy, sloužící k indikaci chyby.
Pokud je chyba fatální dojde k ukončení spojení.
Případná další spojení mohou probíhat dále, ale již
nejde pomocí nich založit nové (viz dále).
Příkladem takových chyb je např. přijetí chybné MAC
nebo chybných dat (to se zjistí např. tím, že data nejdou
dekomprimovat), data nelze rozšifrovat, některý z počítačů
není schopen použít dostatečně silné šifrování, byl
přijat certifikát neznámé certifikační autority, apod.
Change Cipher Spec protokol
Tímto protokolem si dávají klient a server najevo,
že další komunikace bude probíhat pod vyjednaným šifrováním
s vyjednanými klíči. Zpráva o změně se posílá těsně
před ukončením handshaku.
Vlastní Handhake protokol
Handshake znamená potřesení rukou dvou lidí, kteří
se seznamují. Podobně je to i s handsahke protokolem.
Při handshaku se oba počítače "představují"
vyměňují informace o způsobu komunikace mezi nimi. Tyto
informace uchovává record vrstva. Jde např. o:
- identifikátor spojení
- certifikát počítače, s nímž se komunikuje
- způsob komprese dat
- algoritmy pro šifrování a hešování
- master secret - klíč sdílený komunikujícími stranami
-
lze vytvořit další spojení?
Všechny body budou asi jasné až na poslední. TLS totiž
umožňuje na základě jednoho handshaku vytvářet další
spojení. To, ale někdy nemusí být vhodné. Proto lze
tuto možnost vypnout během navazování spojení.
Při psaní aplikace, která využívá TLS se paradoxně
nelze úplně spolehnout na bezpečnost handshake protokolu
proti útokům. Např. útočník (man-in-the-middle) může
znemožnit přístup k portu na němž se komunikuje, pokusit
vyjednat spojení, které je chráněno slabou šifrou, případně
není vůbec šifrováno, nebo vytvořit spojení, kde se počítače
vzájemně neidentifikují.
Z toho plyne, že aplikace by měla mít určité požadavky
a na nich trvat. Tj. komunikace na určitém portu, použití
dostatečně silné šifry a vyžádání certifikátu.
Pozn.: Server může klientovi kdykoli poslat žádost
o zaslání ClientHello. Tím ho vyzve k novému handshaku.
Klient má možnost odmítnout. Pokud klient neodpoví, spojení
se přeruší. Tato možnost zaslání žádosti umožňuje změnu šifrování "za běhu".
Jak probíhá handshake
Existují dva možné způsoby handshaku. Buď se provede
celý handshake nebo se vyjedná nové spojení na základě
existujícho.
Kompletní handshake
Kompletní handshake mezi serverem
a klientem
Dále následuje popis handshaku znázorněném na obrázku.
Spojení iniciuje klient odesláním zprávy ClientHello
serveru. Server na to odpoví zprávou ServerHello. V
obou se posílají mimojiné informace o použité verzi
protokolu, sadě šifer, kterou podporují a náhodně vygenerované
řetězce, které se používají ve vrstvě record k výpočtu
klíčů.
V komunikaci pokračuje server. Pokud se chce identifikovat,
pošle svůj certifikát. Pokud jej nepošle nebo poslaný
certifikát slouží jen k identifikaci musí navíc poslat
klientovi svůj veřejný šifrovací klíč. Tento klíč použije
klient k výměně premaster-secret.
Pokud server poslal svůj certifkát, může požát klienta
o identifikaci. V zaslané zprávě uvede seznam certifikačních
autorit, které akceptuje. Poté odešle ServerHelloDone
a čeká na odpověď klienta.
Klient si po obdržení ServerHelloDone zkontroluje,
zda dostal žádost o certifikát. Pokud ano, odešle svůj
certifikát. Dále vygeneruje premaster-secret, zašifruje
a pošle ho serveru.
Pokud klient poslal certifikát, který lze použít k
podpisu, pošle ještě zprávu, která slouží k explicitnímu
ověření certifikátu. Klient potvrdí serveru, že následující
zprávy již bude šifrovat s vyjednanými klíči. Nakonec
pošle zašifrovanou zprávu, pomocí které server zkontroluje,
že autentizace a výměna klíčů proběhla spávně.
Server po přijetí zpráv nahradí aktuální metodu šifrování
metodou vyjednanou a klientovi dá vědět. Nakonec ještě
pošle kontrolní zprávu. Poté může začít vlastní přenos
dat aplikací.
Zjednodušený handshake
Zjednodušený handshake při obnově či duplikaci spojení
Tento zjednodušený handshake se používá, pokud chce
klient se serverem pokračovat v dříve navázaném spojení
nebo chce duplikovat existující spojení.
Klient zašle zprávu CilentHello s identifikátorem spojení,
v němž chce pokračovat. Pokud ho server nenajde začne
kompletní handshake. Pokud ho najde potvrdí klientovy,
že má nastavenou metodu šifrování podle zadaného spojení
a odešle kontrolní zprávu. To samé provede i klient.
Poté je možné posílat aplikační data.
|