.
.
 TLS -> Popis protokolu -> TLS Handshake Protocol
Vydáno: 13. listopadu 2004
.
.
.
.
.
.
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.

.
.
.   .
.
. admin@webcity.wz.cz .
|Základní pojmy|Úvod|Protokol TLS|TLS v praxi|Shrnutí|Zdroje|Autor|
. © P.D. 2004™ .
.