tls studio portable library full example ejemplo descargar certpathvalidatorexception android fiddler httpsurlconnection

studio - telerik fiddler android



Fiddler-Descifra el tráfico SSL HttpsUrlConnection de Android (3)

He pasado innumerables horas intentando descifrar el tráfico SSL de Android a través de Fiddler para HttpsUrlConnection con muy poco éxito. ¿Cómo configuro de forma confiable Fiddler para descifrar el tráfico SSL de una aplicación de Android usando HttpsUrlConnection?

Aqui estan mis pasos

  1. Ejecute Fiddler en la PC (con la configuración adecuada: capture HTTPS Connect, descifre el tráfico HTTPS, permita que las computadoras remotas se conecten)
  2. Configure la conexión inalámbrica en el dispositivo Android al proxy a través de la PC que ejecuta Fiddler
  3. Desde el dispositivo Android, abra el navegador para http: // [ip of pc running fiddler]: 8888 y descargue "FiddlerRoot certificate". Nombre e instálalo.
  4. Abra https://www.google.com en el navegador de Android y vea el tráfico descifrado en Fiddler en la PC.

Los trabajos anteriores. El problema es que el tráfico de android que no es del navegador aparece en Fiddler como túneles de conexión. Mi investigación inicial sugirió que el problema se debía a cómo se confiaba en los certificados a través de HttpsUrlConnection, así que me aseguré de confiar en todos los certificados basados ​​en este artículo https://secure.mcafee.com/us/resources/white-papers/wp-defeating-ssl-cert-validation.pdf

Desafortunadamente, confiar en todos los certificados no me funcionó con HttpsUrlConnection, así que dejé de investigar. Unos días más tarde, decidí intentarlo de nuevo y me sorprendió descubrir que el tráfico de violinistas se estaba descifrando para HttpsUrlConnection. Desafortunadamente, no hice más cambios para solucionar este problema, así que no estoy completamente seguro de por qué comenzó a funcionar. El dispositivo con el que funciona es una versión de Android LG-Optimus L9 4.0.4 y está enraizado.

Ahora estoy tratando de configurar esto para un Nexus 7 Android Versión 4.2.2 (no rooteado) pero, por desgracia, todo lo que veo en Fiddler son los túneles de conexión. Dado que el certificado en ambos dispositivos tiene la misma serie y la aplicación que estoy probando es idéntica, me sorprende por qué no puedo configurar Fiddler con otro dispositivo Android.

Para resumir

  • Fiddler puede descifrar el tráfico SSL del LG Optimus pero solo muestra los túneles de conexión de Nexus 7
  • Ambos dispositivos ejecutan la misma aplicación que utiliza HttpsUrlConnection para solicitudes de red
  • Ambos dispositivos tienen el mismo certificado de fiddler instalado (coincidencia de serie) y ningún otro certificado de usuario instalado.
  • No pienses que esto importa pero ...
    • El dispositivo rooteado (LG Optimus Android 4.0.4) usa Proxy Droid para apuntar a la PC que ejecuta fiddler
    • Dispositivo no rooteado (Nexus 7 Android 4.2.2) que usa la función "modificar red" incorporada para apuntar a la PC que ejecuta fiddler

Aquí hay una solución.

Suponiendo que el nombre de host al que estoy enviando mis solicitudes https es myHostName.com, agregue lo siguiente a CustomRules.js de Fiddler

if (!oSession.isHTTPS && !oSession.HTTPMethodIs("CONNECT") && (oSession.HostnameIs("myHostName")) { oSession.oRequest.headers.UriScheme = "https"; }

Luego, en el código de Android, actualice la URL para usar http en lugar de https.

Ahora el cliente se comunicará con Fiddler sin SSL y todo el tráfico de solicitud / respuesta estará visible.

El inconveniente obvio de este enfoque es que las URL deben modificarse en el cliente para usar http. No he usado este enfoque el tiempo suficiente para descubrir inconvenientes adicionales.


Mi investigación mostró que hay un error en la implementación de la canalización HttpsUrlConnection.

Para resolver un problema, debe realizar los siguientes pasos en Fiddler:

  1. En Fiddler, haga clic en "Reglas-> Personalizar reglas";

  2. En el script abierto y encontrar la función OnBeforeResponse

  3. En el cuerpo de la función agrega el siguiente código:

    if (oSession.oRequest["User-Agent"].indexOf("Dalvik") > -1 && oSession.HTTPMethodIs("CONNECT")) { oSession.oResponse.headers["Connection"] = "Keep-Alive"; }

4. Guardar archivo y reiniciar Fiddler


Tener el dispositivo enraizado es la clave. Al menos en mi escenario.

He desrooteado el LG Optimus Android 4.0.4 y se actualizó a 4.1.2. Intenté que el violinista hiciera todos los mismos pasos pero solo se mostraron los túneles de conexión.

Registre nuevamente el LG Optimus e inmediatamente puedo ver todas las solicitudes / respuestas a través de Fiddler.

Supongo que rootear el N7 también permitirá que funcione.