¿Por qué este protocolo de enlace SSL falla con el iPad? [cerrado]

3

Tengo un servidor Tomcat que escucha en un socket SSL con protocolo TLS. Al conectar con todos los navegadores de escritorio todo funciona bien. Cuando se conecta con Safari en el iPad, falla el protocolo SSL.

Olfateé lo que pasa pero no puedo entender lo que está pasando. Esta es la salida de ssldump. Como puede ver, el cliente iPad prueba tres veces con diferentes versiones de cliente y cifrados, pero el servidor siempre responde handshake_failure.

El último intento es este (el saludo completo se encuentra en el enlace anterior).

New TCP connection #3: host35-105-static.24-87-b.business.telecomitalia.it(59123) <-> 192.168.1.55(8443)
3 1  0.0898 (0.0898)  C>S  Handshake
  ClientHello
    Version 3.0
    cipher suites
    Unknown value 0xff
    Unknown value 0x3d
    Unknown value 0x3c
    SSL_RSA_WITH_AES_128_CBC_SHA
    SSL_RSA_WITH_RC4_128_SHA
    SSL_RSA_WITH_RC4_128_MD5
    SSL_RSA_WITH_AES_256_CBC_SHA
    SSL_RSA_WITH_3DES_EDE_CBC_SHA
    SSL_DHE_DSS_WITH_NULL_SHA
    Unknown value 0x6b
    SSL_DHE_RSA_WITH_AES_128_CBC_SHA
    SSL_DHE_RSA_WITH_AES_256_CBC_SHA
    SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA
    Unknown value 0x3b
    SSL_RSA_WITH_NULL_SHA
    SSL_RSA_WITH_NULL_MD5
    compression methods
              NULL
3 2  0.0906 (0.0008)  S>C  Alert
  level           fatal
  value           handshake_failure
3    0.0907 (0.0000)  S>C  TCP FIN
3    0.1772 (0.0865)  C>S  TCP FIN

¿Cuál puede ser el problema? ¿Cómo puedo investigarlo mejor?

Muchas gracias

Actualización : habilitando el registro SSL en java (servidor de registro), entiendo esto, así que realmente creo que esto está relacionado con el cifrado:

Allow unsafe renegotiation: false
Allow legacy hello messages: true
Is initial handshake: true
Is secure renegotiation: false
http-192.168.1.55-8443-1, setSoTimeout(60000) called
[Raw read]: length = 5
0000: 16 03 00 00 4B                                     ....K
[Raw read]: length = 75
0000: 01 00 00 47 03 00 51 1E   33 5C CB 56 A8 58 4B 4D  ...G..Q.3\.V.XKM
0010: 34 86 04 4C CC 4E 00 A0   A8 7B 60 4E 6A 17 28 2F  4..L.N....'Nj.(/
0020: DB 51 1C 17 AE 9C 00 00   20 00 FF 00 3D 00 3C 00  .Q...... ...=.<.
0030: 2F 00 05 00 04 00 35 00   0A 00 67 00 6B 00 33 00  /.....5...g.k.3.
0040: 39 00 16 00 3B 00 02 00   01 01 00                 9...;......
http-192.168.1.55-8443-1, READ: SSLv3 Handshake, length = 75
*** ClientHello, SSLv3
RandomCookie:  GMT: 1360933724 bytes = { 203, 86, 168, 88, 75, 77, 52, 134, 4, 76, 204, 78, 0, 160, 168, 123, 96, 78, 106, 23, 40, 47, 219, 81, 28, 23, 174,  156 }
Session ID:  {}
Cipher Suites: [TLS_EMPTY_RENEGOTIATION_INFO_SCSV, Unknown 0x0:0x3d, Unknown 0x0:0x3c, TLS_RSA_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_RC4_128_MD5, TLS_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, Unknown 0x0:0x67, Unknown 0x0:0x6b, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, Unknown 0x0:0x3b, SSL_RSA_WITH_NULL_SHA, SSL_RSA_WITH_NULL_MD5]
Compression Methods:  { 0 }
***
[read] MD5 and SHA1 hashes:  len = 75
0000: 01 00 00 47 03 00 51 1E   33 5C CB 56 A8 58 4B 4D  ...G..Q.3\.V.XKM
0010: 34 86 04 4C CC 4E 00 A0   A8 7B 60 4E 6A 17 28 2F  4..L.N....'Nj.(/
0020: DB 51 1C 17 AE 9C 00 00   20 00 FF 00 3D 00 3C 00  .Q...... ...=.<.
0030: 2F 00 05 00 04 00 35 00   0A 00 67 00 6B 00 33 00  /.....5...g.k.3.
0040: 39 00 16 00 3B 00 02 00   01 01 00                 9...;......
http-192.168.1.55-8443-1, SEND SSLv3 ALERT:  fatal, description = handshake_failure
http-192.168.1.55-8443-1, WRITE: SSLv3 Alert, length = 2
[Raw write]: length = 7
0000: 15 03 00 00 02 02 28                               ......(
http-192.168.1.55-8443-1, called closeSocket()
http-192.168.1.55-8443-1, handling exception: javax.net.ssl.SSLHandshakeException: no cipher suites in common
http-192.168.1.55-8443-1, called close()
http-192.168.1.55-8443-1, called closeInternal(true)
Finalizer, called close()
Finalizer, called closeInternal(true)
Finalizer, called close()
Finalizer, called closeInternal(true)
Finalizer, called close()
Finalizer, called closeInternal(true)
    
pregunta eppesuig 15.02.2013 - 11:47
fuente

2 respuestas

1

Debería probar ssldump para ver qué sucede para una conexión exitosa desde un navegador, en particular qué cifrados anunció el cliente y cuál eligió el servidor. Esta herramienta también se puede usar para ver qué admite el servidor.

Otra posibilidad es el uso de extensiones. En SSL / TLS , el mensaje ClientHello puede contener extensiones, que los servidores deben omitir cuando no entienden ellos. Algunos servidores (con errores) rechazan la conexión cuando ven extensiones que no admiten.

Para ver exactamente lo que envía el iPad, hasta el último byte, use tcpdump o uno de estos envoltorios gráficos ingeniosos como Wireshark . Luego, puede crear un pequeño programa que abra una conexión TCP al servidor, escriba un ClientHello y vea si el servidor responde con un mensaje de alerta o un ServerHello . Al probar las variantes, debería poder identificar qué hace que el servidor no esté satisfecho con lo que envía el iPad (el diagnóstico no se está recuperando, pero eso es un paso en la dirección correcta). Podría usar el código fuente de TestSSLServer como base para este programa.

    
respondido por el Thomas Pornin 15.02.2013 - 12:44
fuente
1

Para que TLS pueda implementar varios sitios https en una sola dirección IP, el protocolo debe renegociar la conexión. Intente habilitar ese lado del servidor de renegociación insegura.

Thomas mencionó "algunos servidores con errores", aquí hay un enlace a una nota técnica de Apple titulada " iOS 5 y TLS 1.2 Problemas de interoperabilidad ".

    
respondido por el rjt 20.02.2013 - 05:26
fuente

Lea otras preguntas en las etiquetas