Implementazione del livello record TLS

1

Ho una certa confusione generale sul protocollo TLS. Una domanda riguarda l'ID di sessione. Un id di sessione all'interno del mesomessage TLS dovrebbe avere un campo di lunghezza id di sessione? Non leggo nulla a riguardo nella richiesta di commenti su TLS. Se un cliente non sta riprendendo una sessione precedente, allora dice che dovrebbe rimanere 'vuoto'. Cosa significa? Forse la lunghezza della sessione di id (a sua volta un campo da 1 byte) di zero, seguita da nessun campo ID di sessione? O un campo ID di sessione con zero byte? O dovrei rimuovere completamente i campi ID sessione?

Inoltre in questa domanda link Ho ricevuto gli avvisi 70 TLS fatali, indipendentemente dalle combinazioni di protocolli che offro? Se inverto l'ordine dei byte del testo normale ottengo un avviso fatale per 10?

Qualsiasi aiuto è apprezzato.

    
posta marshal craft 13.02.2016 - 09:07
fonte

1 risposta

1

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.

    
risposta data 13.02.2016 - 23:31
fonte

Leggi altre domande sui tag