Ci sono tre (presto quattro) versioni di TLS, ciascuna con un proprio RFC (più uno storico retrospettivo per SSLv3), ma al livello di record di base per i record non crittografati, ovvero i record iniziali di handshake tramite il primo CCS o avviso: sono uguali.
RFC5246 per TLSv1.2 nella sezione su ClientHello definisce nella parte superiore della pagina 41 quella struttura (ClientHello) per includere SessionID session_id
. Analogamente per ServerHello nella parte inferiore di pagina 42. Notare che HelloRequest è anche classificato come messaggio di saluto (e un messaggio di handshake) ma non contiene un session_id o, in effetti, alcun corpo. SessionID
è definito a pagina 40 come
opaque SessionID<0..32>;
Dovresti riconoscere quella sintassi come un vettore a lunghezza variabile precedentemente spiegato in 4.3 che spiega come funziona il prefisso di lunghezza di ogni vettore a lunghezza variabile.
'Empty' significa nessun byte nel valore cioè una lunghezza pari a zero, codificato come prefisso di lunghezza di zero seguito da no (o equivalentemente non da alcun contenuto). Se pensi alle codifiche definite nella sezione 4, è ovvio che non puoi omettere un campo da una struttura fissa; alcuni (non tutti) campi a lunghezza variabile possono essere vuoti e alcune (solo alcune) strutture hanno varianti in cui si utilizzano solo i campi della variante applicabile in una data situazione come specificato. Tuttavia, il campo di estensione in Client o Server Hello è definito come una sequenza di articoli a lunghezza variabile ognuno dei quali inizia con un tipo esplicito (2 byte), quindi è possibile includere o omettere e riordinare gli elementi di estensione all'interno del campo delle estensioni - almeno per la codifica; se un peer accetterà un insieme di estensioni dipende da quel peer.
Se vuoi implementare TLS devi veramente capire le RFC applicabili per la versione (s) che vuoi 2246/4346/5246, più alcune correlate come 3546/4366/6066 per le estensioni, forse 4492 ( e SEC1 ecc.) per ECC, magari aggiunti suite come 5288/5289 per GCM, ecc.