Me encontré con este problema recientemente. Ejecutaríamos ssldump y openssl s_client al mismo tiempo. openssl mostraría que el cifrado activo es AES256-SHA , pero ssldump todavía imprimiría TLS_RSA_WITH_RC4_128_MD5 en su salida.
Creo que encontré un error en ssldump . Mirando a través del código fuente encontré lo siguiente:
- Los paquetes de intercambio de SSL se descodifican en la función
decode_ContentType_handshake() en ssl/ssl_enum.c:20
- Esta función llama a
ssl_decode_switch(ssl,HandshakeType_decoder,t,dir,seg,data) , donde HandshakeType_decoder es una matriz de decoder structs \
-
ssl_decode_switch(ssl,dtable,value,dir,seg,data) ( ssl/ssl_print.c:204 ) itera a través de la matriz dtable hasta que encuentra la entrada decoder con type == value o type == -1 ("no encontrado")
- Sin embargo, al observar la definición de
HandshakeType_decoder en ssl/ssl_enum.c:212 , la matriz no termina con una estructura decoder con type == -1 ; hay un 0 al final
- Además, inmediatamente después de la definición
HandshakeType_decoder está la definición de cipher_suite_decoder ( ssl/ssl_enum.c:266 ) que es una matriz de la misma estructura decoder . Esta matriz contiene una lista de cifrados.
- Esto significa que si el tipo de protocolo de enlace SSL no se encuentra en
HandshakeType_decoder , ssl_decode_switch() continuará buscando en cipher_suite_decoder ya que (probablemente) estará en la memoria directamente después de los datos de HandshakeType_decoder
- Y esto está sucediendo en mi caso. Por alguna razón,
decode_ContentType_handshake() decodificó el paquete de intercambio para ser del tipo 4 que ssl_decode_switch() no pudo encontrar en el HandshakeType_decoder . Sin embargo, por coincidencia 4 es el valor type de la entrada cipher_suite_decoder con name == TLS_RSA_WITH_RC4_128_MD5
Se me acaba el tiempo para investigar este problema, así que no sé por qué ssldump está tratando de descodificar un paquete de intercambio de manos con un tipo no válido. Sin embargo, estoy convencido de que la matriz HandshakeType_decoder debe terminarse con un -1 para evitar el desbordamiento.