Conexión al servidor doméstico a través de https: funciona con WiFi, pero no con 3G

Tengo un problema muy extraño con mi teléfono (Alcatel 997D con Android 4.0.4). Dejame empezar por el principio. Proporciono ciertos servicios (principalmente cosas de sincronización, Firefox y Cal/CardDAV) en un servidor con claves SSL autofirmadas que se encuentra en mi red doméstica. Para proporcionar conectividad, hice un pequeño agujero en el cortafuegos de mi enrutador y registré un dominio que está configurado en mi dirección IP WAN regularmente.

Todo funcionó bien hace algún tiempo (6 meses, creo). Pero ahora mi teléfono no puede conectarse a mi servidor cuando usa la conexión 3G (con todas las aplicaciones de sincronización, Firefox, aplicaciones de sincronización Cal/CardDAV, Firefox con mi IP WAN como dirección), pero todo funciona bien cuando me conecto a través del WLAN local.

Básicamente, lo único que cambié son las claves SSL en mi servidor, y tal vez instalé algunas pequeñas actualizaciones de Android en el teléfono. Para descartar que sea un problema con la red 3G, hice otro agujero en el firewall de mi enrutador y envié el tráfico a una de mis otras computadoras (mostrando una pequeña página web sobre http). Para mi asombro, el teléfono podía conectarse a la página a través de 3G.

Esto es muy inquietante. Para descartar que el teléfono sea el problema, aún necesito verificar la conectividad 3G en otra máquina e intentar conectarme a mi servidor a través de una WLAN externa.Pero por si acaso: ¿Cómo puedo obtener más información sobre el lado de Android? Todas las aplicaciones proporcionan resultados más o menos sin sentido.

Mientras buscaba en Google, descubrí que hay más opciones disponibles para la depuración, como instalar curl. Haré esto, pero haga esta pregunta de todos modos con la esperanza de que alguien haya visto algo similar, o pueda señalarme un error trivial de mi parte.


Hay errores en el registro del sistema que indican problemas de protocolo de enlace SSL en la conexión 3G. Aquí hay algunas entradas de registro:

[ 08-24 12:30:02.508 19763:0x4d6c E/NativeCrypto ]
Unknown error during handshake
[ 08-24 12:30:08.274 19763:0x4d6c E/NativeCrypto ]
Unknown error during handshake
[ 08-24 12:30:08.275 19763:0x4d6c W/System.err ]
javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x18e8508: Failure in SSL library, usually a protocol error
[ 08-24 12:30:08.275 19763:0x4d6c W/System.err ]
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:683 0x4027f522:0x00000000)
[ 08-24 12:30:08.276 19763:0x4d6c W/System.err ]
    at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:460)
[ 08-24 12:30:08.276 19763:0x4d6c W/System.err ]
    at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:257)
[ 08-24 12:30:08.276 19763:0x4d6c W/System.err ]
    at libcore.net.http.HttpConnection.setupSecureSocket(HttpConnection.java:210)
[ 08-24 12:30:08.276 19763:0x4d6c W/System.err ]
    at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:486)
[ 08-24 12:30:08.276 19763:0x4d6c W/System.err ]
    at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:450)
[ 08-24 12:30:08.276 19763:0x4d6c W/System.err ]
    at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
[ 08-24 12:30:08.276 19763:0x4d6c W/System.err ]
    at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
[ 08-24 12:30:08.276 19763:0x4d6c W/System.err ]
    at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
[ 08-24 12:30:08.276 19763:0x4d6c W/System.err ]
    at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:194)
[ 08-24 12:30:08.276 19763:0x4d6c W/System.err ]
    at libcore.net.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:280)

[…]

Caused by: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x18e8508: Failure in SSL library, usually a protocol error
[ 08-24 12:30:08.277 19763:0x4d6c W/System.err ]
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:683 0x4027f522:0x00000000)
[ 08-24 12:30:08.278 19763:0x4d6c W/System.err ]
    at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method)
[ 08-24 12:30:08.278 19763:0x4d6c W/System.err ]
    at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:410)
[ 08-24 12:30:08.278 19763:0x4d6c W/System.err ]

La conexión a otras páginas SSL, por ejemplo, Mozilla Add-Ons, funciona con 3G. Así que supongo que hay algo en mis claves SSL que no les gusta a la empresa de telecomunicaciones o a Android. Haré algunas pruebas con otros dispositivos y llaves.


Probé la red 3G de mi proveedor con un módem USB móvil conectado a mi Mac, y todo funcionó, calendario, libreta de direcciones, etc. y todo fue un poco lento). Creo que eso prueba que Android tiene algo que ver con este lío.


Bien, algo que se me acaba de ocurrir: tenía una aplicación utilizada para la sincronización del calendario que ya no podía sincronizarse a través de WLAN después del cambio de certificado SSL. Lanzó una excepción que se quejaba de una extensión crítica no admitida o desconocida. Creo que esa es la clave para resolver el problema.


Cambié el certificado de mi servidor y dejé que Android confiara en la CA, ahora no tengo problemas con los certificados no autorizados a través de WLAN, sin embargo, el problema de 3G persiste. Desenterré esto sobre

SSL23_GET_SERVER_HELLO:unknown protocol

de acuerdo con esto, el error: 140770FC que obtuve apuntaría a un problema de DNS, lo que explicaría por qué sucede solo en 3G, pero no por qué no sucede en la Mac.

Para recopilar un poco más de información, intenté abrir una de mis páginas web con Chrome. Emitió un

Error 111 (net::ERR_TUNNEL_CONNECTION_FAILED)

que estaba conectado a problemas de SSL aquí , pero no puedo reconocer que el error desaparece después de cambiar al puerto estándar. Necesito mejores herramientas para una mayor investigación, tal vez haga otra pregunta más tarde.

El último bloque da algunas pistas: SSL handshake aborted: ssl=0x18e8508: Failure in SSL library, usually a protocol errory routines:SSL23_GET_SERVER_HELLO:unknown protocol, lo que confirma que su problema radica en la parte de SSL. Lo raro es que esto no suceda en WiFi. ¿Tienes la oportunidad de probar con otro proveedor de 3G? Como no sucede en WiFi, debe ser algo de su parte. Además: ¿Se le presenta un certificado? Si es así, lo miraría más de cerca y lo compararía con lo que esperaría aquí.
@Izzy Lamentablemente, ni siquiera llego a la etapa de certificado en Firefox, no se establece ninguna conexión cuando uso 3G. Realizo algunas otras pruebas en los próximos días y actualizo mi pregunta de acuerdo con mis hallazgos.
Solo se me ocurre: ¿podría ser algún problema de "mapeo de puertos" en el NAT de su proveedor? Tal vez sus experimentos deberían incluir servicios de enlace a un puerto diferente. El uso de una SIM diferente (mejor de otro proveedor) también podría generar algunos resultados interesantes. Como ni siquiera llega a la "etapa de certificado": ¿ha verificado los registros en sus servidores, si hay alguna solicitud entrante? También pueden revelar detalles útiles.
@Izzy Probé la red 3G de mi proveedor con un módem USB móvil conectado a mi Mac, y todo funcionó, calendario, libreta de direcciones, etc. (desactivé Ethernet y WLAN en la Mac, y la aplicación de telecomunicaciones mostró un rendimiento de 1 MB, y todo fue un poco lento). Creo que eso prueba que Android tiene algo que ver con este lío. Compruebo los registros de mi servidor, tal vez haya NAT involucrado.

Respuestas (1)

Como usted dice que el problema existe solo en 3G y no en WiFi, probablemente se deba a algún problema con el punto de acceso de su proveedor de red. Enfrenté un problema similar en algún momento porque el punto de acceso predeterminado tenía un proxy que no permitía el túnel SSL. Después de eliminar el puerto y el proxy del punto de acceso, este problema se resolvió.

Fuente: http://lifepluslinux.blogspot.in/2015/07/errtunnelconnectionfailed-on-mobile.html