¿Cuáles son las diferencias exactas de nivel de protocolo entre SSL y TLS?

40

Esta es una inmersión técnica profunda después de esta pregunta general .

¿Cuáles son las diferencias de protocolo entre SSL y TLS?
¿Existe realmente una diferencia suficiente para garantizar un cambio de nombre? (versus llamarlo "SSLv4" o SSLv5 para las versiones más nuevas de TLS)

goodguys_activate
fuente
3
Sospecho que si desea una comprensión realmente profunda, tendrá que comenzar a leer las especificaciones. Echa un vistazo a la página wiki . Incluye enlaces a las RFC y especificaciones.
Zoredache
77
@ Zoredache, no use "wiki" como abreviatura de "Wikipedia".
Spiff

Respuestas:

36

SSLv2 y SSLv3 son completamente diferentes (y ambos ahora se consideran inseguros). SSLv3 y TLSv1.0 son muy similares, pero tienen algunas diferencias.

Podría considerar TLSv1.0 como SSLv3.1 (de hecho, eso es lo que sucede dentro de los registros intercambiados). Es más fácil comparar el TLSv1.0 con TLSv1.1 y TLSv1.2 porque todos han sido editados dentro de IETF y siguen más o menos la misma estructura. SSLv3 está siendo editado por una institución diferente (Netscape), lo que hace que sea un poco más difícil detectar las diferencias.

Aquí hay algunas diferencias, pero dudo que pueda enumerarlas todas:

  • En el ClientHellomensaje (primer mensaje enviado por el cliente, para iniciar el protocolo de enlace), la versión es {3,0}para SSLv3, {3,1}para TLSv1.0 y {3,2}para TLSv1.1.
  • El ClientKeyExchangedifiere.
  • El MAC / HMAC difiere (TLS usa HMAC mientras que SSL usa una versión anterior de HMAC).
  • La derivación clave difiere.
  • Los datos de la aplicación cliente se pueden enviar inmediatamente después de enviar el Finishedmensaje SSL / TLS en SSLv3. En TLSv1, debe esperar el Finishedmensaje del servidor .
  • La lista de conjuntos de cifrado difiere (y algunos de ellos han sido renombrados de SSL_*a TLS_*, manteniendo el mismo número de identificación).
  • También hay diferencias con respecto a la nueva extensión de renegociación .

Recomiendo encarecidamente el libro de Eric Rescorla - SSL y TLS: Diseño y construcción de sistemas seguros , Addison-Wesley, 2001 ISBN 0-201-61598-3 , si realmente desea más detalles. He aprendido sobre algunos de los puntos mencionados anteriormente en este libro. El autor ocasionalmente menciona las diferencias entre SSLv3 y TLS (v1.0 solo en el momento en que se escribió el libro) cuando explica algunos de los mensajes SSL / TLS, pero necesita la explicación de fondo sobre estos mensajes para tener la oportunidad de entender ( y no es apropiado copiar / pegar de este libro aquí).

Bruno
fuente
Parece que las extensiones TLS solo se aplican a TLS y no a SSL, ¿correcto? Entonces, por ejemplo, los clientes TLS pueden enviar un ' ClientHello' registro extendido , mientras que los clientes solo SSL3 solo enviarían el original ' ClientHello'.
culix
@culix, en general, eso es correcto (principalmente porque las extensiones TLS están definidas en el marco de IETF). SSLv3 también pudo tener datos adicionales en su registro ClientHello (igual que TLS 1.0 y 1.1). (Busque draft302.txty " En aras de la compatibilidad directa ... ", compare con las secciones 7.4.1.2 en las especificaciones de TLS). Para hacer frente a las pilas que no admiten esto, también hay soluciones como el pseudo cifrado de SCSV en la extensión de renegociación.
Bruno
@Bruno, enlace del libro hacia abajo .....
Pacerier
4

Simplemente haré eco de las otras respuestas, pero quizás con un énfasis ligeramente diferente.

Había un protocolo de sockets seguros que era "propiedad" de Netscape que se llamaba SSL versión 2. Una nueva versión con una estructura de registro diferente y mejoras de seguridad también "propiedad" de Netscape se lanzó y se llamó SSL versión 3. Dentro del protocolo en varios lugares es un campo de número de versión binario. Para SSL versión 3, este campo se establece en 0x03 0x00, es decir, la versión 3.0. Luego, el IETF decidió crear su propio estándar. Posiblemente porque había algunas incertidumbres de propiedad intelectual sobre SSL, incluso si "SSL" era una marca comercial de Netscape, cuando el IETF lanzó la próxima versión de este protocolo, le dieron su propio nombre: Protocolo de seguridad de la capa de transporte o TLS versión 1.0. El formato de registro y la estructura general son idénticos y consistentes con SSL v3. El número de versión binaria se revirtió a 0x03 0x01, y como otros han notado, hubo algunos cambios criptográficos menores. Desde entonces ha habido TLS versión 1.1 y 1.2, para los cuales los números de protocolo interno son 0x03 0x02 y 0x03 0x03.

Ignorando SSLv2, fue básicamente un cambio de nombre junto con un ajuste de protocolo normal que ocurre a medida que las personas se vuelven más inteligentes sobre la seguridad y el rendimiento.

James reinstala a Monica Polk
fuente
3

Básicamente, no es más que un cambio de nombre para una versión más nueva del protocolo. Creo que la razón principal de esto fue diferenciarlo del estándar informal más antiguo diseñado principalmente por Netscape después de que se convirtió en un protocolo oficial de seguimiento de estándares IETF.

Como se dijo en las respuestas a su pregunta anterior, esto no significa que SSLv3 y TLSv1.0 sean compatibles. Citando de RFC 2246:

Las diferencias entre este protocolo y SSL 3.0 no son dramáticas, pero son lo suficientemente significativas como para que TLS 1.0 y SSL 3.0 no interoperen.

Supongo que si realmente quieres saber las diferencias exactas en los protocolos, debes leer los estándares y compararte.

Borrador del protocolo SSLv3 de Netscape TLSv1.0 RFC 2246

Sven
fuente
@SvenW Me compararía por mí mismo, pero es un gran desafío que no estoy seguro de querer emprender. Ese estándar ha existido durante 10 años. Seguramente alguien ya hizo la comparación, con gráficos bonitos para que los tipos como yo puedan entenderlo.
goodguys_activate
@ MakerOfThings7 Lamentablemente, esta pregunta no es algo que pueda resumirse en un gráfico circular. Las únicas cosas que se pueden poner en un gráfico son las tasas de bits de cifrado o (y estoy estirando aquí) el nivel de seguridad otorgado (donde SSLv3 es "-" y TLS es "=" ...) La única idea para se puede obtener leyendo las especificaciones, o al menos la página de Wikipedia (que le proporcioné en la pregunta anterior)
gWaldo
@SvenW ¿Has leído y entendido las dos especificaciones tú mismo?
goodguys_activate
¿No, por qué debería? No soy un desarrollador que escribe software en contra de esta especificación, que es la única razón por la que puedo pensar. Si necesito usar SSL / TLS, leo el documento para OpenSSL, etc., que es suficiente para los usuarios y administradores.
Sven
@SvenW Sin ofender, pero lo mantendré abierto hasta que reciba una respuesta de alguien que leyó y entendió las especificaciones ... lo cual es razonable dada mi pregunta.
goodguys_activate
0

El protocolo de cifrado SSL ahora se llama TLS, lo que da como resultado dos nombres para el mismo protocolo. El software actual negociará TLS versión 1 o SSL versión 3 automáticamente. Los humanos, por otro lado, tienen que decidir entre usar el término SSL más reconocible versus la designación TLS oficial.

SSL es el predecesor de TLS.

TLS y SSL encriptan los segmentos de las conexiones de red en la capa de aplicación para garantizar un tránsito seguro de extremo a extremo en la capa de transporte.

aleroot
fuente
¿Entonces es un cambio de nombre? ¿Eso es?
goodguys_activate
sí TLS es la versión más nueva, TLS puede transformarse en SSL3 si es necesario.
aleroot
3
No, no es un cambio de nombre. TLSv1 es interoperable con SSLv3 (y retrocederá), pero eso no es necesariamente cierto al revés. TLSv1 es como SSLv4. Nota: también hay varias versiones de TLS.
Philip Reynolds
-2

Diferencias:

  • TLS se ejecuta bastante por encima de un protocolo estándar. Una conexión TLS comienza como una sesión sin cifrar de un servicio estándar, pero en algún momento comienzan a negociar el cifrado. Requiere extender el protocolo estándar para esta negociación.
  • Los protocolos estándar se ejecutan sobre SSL. Una conexión SSL primero negocia el cifrado, luego ejecuta el protocolo básico sobre él.
LatinSuD
fuente
Eso no es correcto, estás hablando de la diferencia entre comenzar con SSL / TLS y cambiar a TLS dentro del protocolo a través de comandos como STARTTLS: stackoverflow.com/questions/3660798/…
Bruno