2011-10-16 19 views
5

Actualmente estoy tratando de implementar un tls handshake en un proxy HTTP que estoy escribiendo. Sé que podría usar OpenSSL para hacer el trabajo por mí, pero estoy interesado en escribirlo yo mismo.Análisis de mensaje TLS Handshake

Actualmente estoy trabajando con TLS RFC y estoy confundido acerca de cómo analizar el mensaje de ClientHello, particularmente el hecho de que puede o no tener una ID de sesión y que parece que no hay una cuenta en el número de cifrados o métodos de compresión

¿Alguien sabe la mejor manera de hacerlo?

+3

"Cómo implemento TLS" es probablemente demasiado amplio. –

+0

Mi problema no es con la implementación de todo, el problema es que no sé cómo manejar los casos en que las cosas son opcionales y no parece tener un elemento en el mensaje que me diga cuántos elementos habrá. –

+2

No sé por qué quieres hacer esto en absoluto. No es necesario procesar el contenido de ninguna manera para escribir un proxy HTTP, que no sea el comando CONECTAR. Si su proxy es un punto final SSL, ciertamente debe usar OpenSSL, y si no es un punto final SSL nuevamente, no necesita analizar el SSL tampoco, simplemente envíelo directamente. – EJP

Respuesta

7

El session_id está precedido por la longitud. Lo mismo con las suites de cifrado y los algoritmos de compresión.

Lo que es que se está perdiendo es la sección 4.3 del RFC:

vectores de longitud variable se definen mediante la especificación de un subrango de legales longitudes, inclusive, usando la notación. Cuando se codifica , , la longitud real precede a los contenidos del vector en la secuencia de bytes. La longitud será en forma de número que consuma tantos bytes como sea necesario para mantener la longitud máxima especificada (techo) del vector. Un vector de longitud variable con un campo de longitud real cero se denomina vector vacío.

+0

Ustedes, desafortunadamente, me lo perdí la primera vez. Lo leí un par de veces más y finalmente atrapé esa línea. –

0

Eche un vistazo a THIS INCREDIBLE BOOK. Tuve que implementar el TLS 1.2 para un sistema integrado sin usar ningún software GPL y esto fue de gran ayuda.