Android – problemas de SSL en el emulador de estudio de Android, funciona bien en el teléfono

Tengo una aplicación que hace llamadas a un servicio web a través de https. Cuando corro el apk en mi teléfono, funciona muy bien. Sin embargo, en el emulador, todas las solicitudes POST a través de SSL fallan con:

Error de lectura: ssl = 0xb402be00: Error en la biblioteca SSL, generalmente un error de error de protocolo: 100c50bf: rutinas SSL: ssl3_read_bytes: NO_RENEGOTIATION (external / boringssl / src / ssl / s3_pkt.c: 852 0xabf7fcd7: 0x00000000)

En los registros de acceso de nuestro servidor, informa de un 403 (Prohibido) siempre que el emulador intente pulsar el servicio web, aparentemente porque el emulador no está moviendo las manos correctamente con nuestro servidor. Hay un montón de líneas como esta en el registro de errores de apache

[Thu Aug 20 12:21:21 2015] [error] [cliente xxx.xxx.xxx.xxx] Negociación handshake no: No aceptado por el cliente !?

Apache realmente agregó el "!?" Por lo que parece un error muy inesperado.

En mi IDE, he marcado la opción de "Aceptar certificados no fiables automáticamente", pero eso no hace ninguna diferencia.

He visto soluciones en la web para la fijación de varios problemas de SSL en Android, sin embargo, todos parecen ser el propio teléfono tiene un problema, y ​​requieren modificación de código. Dado que funciona bien en el teléfono, parece que este es un problema de Android Studio, y yo debería ser capaz de corregir esto con una configuración. O tal vez tengo que hacer algo en un apache?

Conclusión: ¿Cómo puedo obtener mi aplicación para hablar con un servicio web SSL en el emulador de Android Studio?

Usando Studio 1.3.1, Java 1.7.0_65,

 compileSdkVersion 21 buildToolsVersion "22.0.1" defaultConfig { applicationId "com.bla.bla" minSdkVersion 14 targetSdkVersion 19 multiDexEnabled true versionCode 12 versionName '1.2.0.8' 

Le sugiero que confíe en el certificado del servidor SSL protegido en tiempo de ejecución.

Este enfoque es independiente de la configuración del dispositivo y funciona bien para el teléfono y el emulador también.

Escribí una pequeña biblioteca para hacerlo.

Lea más sobre este tema en mi blog:

https://mklimek.github.io/trust-specific-certificate-on-jvm/

Creo que esto es porque el emulador restablecerá sus certificados de CA cada vez que se ejecute.

Revisa esta publicación en Configuración de una entidad emisora ​​de confianza persistente en un emulador de Android

Tenga en cuenta que la ubicación de la CA Certs ha cambiado en Marshmallow, voy a actualizar con alguna información adicional lo antes posible

  • Marcado del certificado SSL de MediaPlayer de Android
  • Uso de un certificado autofirmado para crear una conexión cliente-servidor segura en android
  • SSL Handshake no se puede conectar a Google desde un cliente Android
  • Mostrar certificado de Android
  • Error de lectura: error en la biblioteca SSL, generalmente un error de protocolo
  • Error 'No peer certificate' en Android 2.3 pero NO en 4
  • No es un certificado de confianza que utiliza ksoap2-android
  • Administrador SDK Host desconocido dl-ssl.google.com
  • Conectar el dispositivo android a través de MQTT con ssl
  • Generar un certificado de cliente en un dispositivo Android
  • Servicios web de Android con KSOAP2 y HTTPS
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.