¿Cómo obtener charles proxy trabajo con Android 7 turrón?

Android 7 introdujo algunos cambios en la manera en que se manejan los certificados ( http://android-developers.blogspot.com/2016/07/changes-to-trusted-certificate.html ) y de alguna manera no puedo hacer que mi proxy Charles funcione más.

Mi network_security_config.xml:

<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config> <debug-overrides> <trust-anchors> <certificates src="user" /> </trust-anchors> </debug-overrides> </network-security-config> 

Estoy funcionando en modo de depuración. Pero no importa qué, consigo javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. .

No hace falta decir que pfx un certificado pfx en Settings -> Security -> Install from storage . El certificado aparece en User Credentials pero no en Trusted credentials -> User . En mi dispositivo lollipop, los certificados se enumeran allí.

Estoy utilizando okhttp3 como biblioteca HTTP.

Alguna idea de lo que estoy haciendo mal?

Basado en el hilo de la solución de problemas de los comentarios para el OP, la respuesta es instalar sólo cert de CA del proxy como de confianza, no su cert + clave privada.

El problema fue causado por dos factores:

  1. Instalar no sólo el CERT de CA del proxy MiTM sino también su clave privada (permitiendo así que las aplicaciones VPN en el dispositivo descifren el tráfico de la red MiTM de otras aplicaciones). No necesita la clave privada del proxy MiTM en el dispositivo.

  2. Android Nougat cambio en el comportamiento de la Settings -> Security -> Install from storage flujo de Settings -> Security -> Install from storage para los archivos que contienen una clave privada, además de cert (s). Este cambio en el comportamiento desenmascaró la cuestión anterior.

Antes de Nougat, la Settings -> Security -> Install from storage flujo de Settings -> Security -> Install from storage para los archivos que contienen una clave privada, además de certs instaló erróneamente los certificados como de confianza para la autenticación del servidor (por ejemplo, HTTPS, TLS, Para que se instalen correctamente como certificados de cliente utilizados para autenticar este dispositivo Android en los servidores. En Nougat, el error fue corregido y estos certs ya no se instalan como confiable para la autenticación del servidor. Esto evita que las credenciales de autenticación de cliente afecten (decaer) la seguridad de las conexiones a los servidores. En su situación, esto evita que su MiTM tenga éxito.

Lo complicado es que la Settings -> Security -> Install from storage no proporciona una forma explícita para que el usuario especifique si están instalando una credencial de autenticación de cliente (clave privada + cadena cert) o un ancla de confianza de autenticación de servidor CA cert – no necesita clave privada). Como resultado, las Settings -> Security -> Install from storage flujo de Settings -> Security -> Install from storage adivinan si se trata de credenciales de autenticación de cliente / usuario o de confianza de autenticación de servidor, suponiendo que si se especifica una clave privada, debe ser una credencial de autenticación cliente / usuario . En su caso, asumió incorrectamente que está instalando una credencial de autenticación de cliente / usuario en lugar de un ancla de confianza de autenticación de servidor.

PS Con respecto a su configuración de seguridad de red, probablemente debería configurar la aplicación para que también confíe en anclajes de confianza de "sistema" en el modo de depuración (sección sobre depuración de depuración). De lo contrario, las compilaciones de depuración de la aplicación no funcionarán a menos que las conexiones sean MiTM'd por un proxy cuyo CA cert esté instalado como confiable en el dispositivo Android.

La solución es no utilizar .p12 , sólo navegar con Chrome (con proxy configurado en wifi) a http://charlesproxy.com/getssl e instalar el archivo .pem descargado .

Tenía exactamente el mismo problema en mi Nexus 5X con Android 7.0. Anteriormente se exportó .p12 desde Charles 3.11.5 (Ayuda-> Proxy SSL-> Exportar certificado raíz Charles y clave privada). Cuando intenté instalar .p12 desde el teléfono (Configuración-> Seguridad-> Instalar desde el almacenamiento) aparece sólo en "Credenciales de usuario" y nunca en "Credenciales de confianza", y por supuesto SSL con Charles proxy no funcionó.

El total "how-to" para Android 7.0 sería así:

  1. Configurar WiFi + proxy (como Charles lo requiere). Conéctelo.
  2. En el dispositivo, navega con Chrome a http://charlesproxy.com/getssl , acepta la solicitud para descargar .pem, luego presiona "open", se inicia la aplicación "Certificate installer". Utilícelo para instalar el certificado como "VPN y aplicaciones".
  3. Poner el atributo android:networkSecurityConfig="@xml/network_security_config" en <application> en Manifest.xml
  4. Cree res / xml / network_security_config.xml con el contenido de la primera publicación (es totalmente correcto).
  5. Lanzar Charles y la aplicación y divertirse.

PS Verifique la fecha y la hora en el dispositivo. Debe ser correcto.

Escribí un script que inyectaba el apk con las excepciones requeridas y permitía usar Charles Proxy con la aplicación.

Este es el Github https://github.com/levyitay/AddSecurityExceptionAndroid

Estoy en Android 7.1.1, aquí es cómo me instalo en mi dispositivo (OnePlus One) – sin el cambio de manifiesto (estaba apuntando API 21 para mi aplicación):

En Charles Proxy:

  1. Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser . Este paso le da el IP de proxy y número de puerto y también el enlace a donde debe descargar charles proxy SSL.

En tu teléfono:

  1. Wifi Settings > Modify Network > Advanced Options . Establezca Proxy como Manual e introduzca el número de IP y Puerto que recibió de Charles en el Proxy hostname Proxy port y el Proxy port respectivamente.

  2. (OPCIONAL) Puede o no puede acceder al vínculo chls.pro/ssl proporcionado por Charles anteriormente. En mi dispositivo, siempre me notificaron que no tenía conexión de red. He añadido charlesproxy.com al Bypass proxy for campo.

  3. En su navegador, vaya al enlace en el paso 3 y descargue cualquier certificado necesario (si no funciona en Chrome, descargue Dolphin Browser). Puede nombrar su certificado con cualquier nombre.

De vuelta en Charles Proxy:

  1. Debe obtener el mensaje para Allow o Deny su teléfono para usar el proxy si la configuración predeterminada le pide conexiones remotas.

Ahora puede usar Charles on Nougat 7.1.1.

  • El servidor no admite la suite de cifrado predeterminada de Android 5.0
  • ProGuard causa error de handshake SSL en Android
  • Comunicación de servicio web Https de Android (SSL / TLS 1.2)
  • El certificado StartSSL no es de confianza en Firefox y en Android
  • WebView con certificado de cliente SSL en Android 4 ICS
  • HTTPS GET (SSL) con Android y certificado de servidor auto-firmado
  • ¿Cómo habilito TLSv1.1 + en Xamarin Android (API 16 - 19)?
  • Certificado de fijación en Android
  • Comportamiento de tipo navegador en certificados no válidos / autofirmados
  • Aplicación de Android Conexión al servidor Node.js mediante Socket.io
  • Uso de certificados de cliente / servidor para la autenticación de dos vías socket SSL en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.