java - para - http injector ssl
Cómo iniciar la conexión de SSL con SSLv2 (1)
Quiero iniciar una conexión SSL con un servidor remoto usando SSLv2. Estoy usando Java. Traté de obtener los protocolos compatibles en mi socket usando:
String[] suppProtocols=socket.getSupportedProtocols();
System.out.println("The protocols supported for this socket are:
"+Arrays.toString(suppProtocols));
y obtuve esto en el resultado:
[SSLv2Hello, SSLv3, TLSv1, TLSv1.1, TLSv1.2]
Ahora, leo que Java no es compatible con SSLv2 y SSLv2Hello solo envía mensajes de saludo con SSLv2. No puedo comprender lo que significa esto? ¿No es lo mismo que si el cliente admite SSLv2? ¿Cómo puedo hacer una conexión SSL usando SSLv2?
SSLv3 y TLSv1.x ofrecen una forma de ajustar su mensaje Hola de cliente en un Hola de Cliente SSLv2, como se describe en la especificación TLS: Compatibilidad con versiones anteriores con SSL . SSLv3 y TLS 1 y superiores tienen un mecanismo más consistente para negociar la versión. Como dice la especificación TLS:
La capacidad de enviar mensajes de saludo del cliente de la Versión 2.0 se eliminará con la celeridad debida. Los implementadores DEBEN hacer todos los esfuerzos para avanzar lo más rápido posible. La versión 3.0 proporciona mejores mecanismos para pasar a versiones más nuevas.
Sun / Oracle JRE o OpenJDK no es compatible con SSLv2. Envolver un mensaje SSLv3 + en un mensaje SSLv2 era solo por compatibilidad con versiones anteriores. Ahora está deshabilitado por defecto para clientes en Java 7 . Desde el punto de vista del servidor, al menos puede aceptar otros clientes SSLv3 + que envuelvan su mensaje Client Hello en un mensaje SSLv2 de esta manera, ya sea que admitan SSLv2 o no.
Encontrará más detalles sobre el soporte de Java (incluidas otras implementaciones) en esta pregunta .
En términos generales, SSLv2 se considera inseguro: simplemente no debe usarlo. La tendencia general es alejarse de SSLv3 hacia TLS 1.0 o superior, para no retroceder.