Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


La manipulación SSL personalizada dejó de funcionar en Android 2.2 FroYo

Para mi aplicación, Transdroid, me estoy conectando a servidores remotos a través de HTTP y opcionalmente de forma segura a través de HTTPS. Para estas conexiones HTTPS con el HttpClient estoy usando una implementación de fábrica de socket SSL personalizada para asegurarse de que los certificados autofirmados están funcionando. Básicamente, acepto todo e ignoro cada comprobación de cualquier certificado.

Esto ha estado funcionando bien desde hace algún tiempo, pero ya no funciona para Android 2.2 FroYo. Al intentar conectarse, devolverá una excepción:

  • Un entorno de ejecución Java (JRE) o Java Development Kit (JDK) debe estar disponible para ejecutar Eclipse
  • ¿Cómo implementar NestedScrolling en Android?
  • ¿Cómo solucionar el error "proceso es malo" para un Widget de Android?
  • GetLastKnownLocation devolviendo NULL
  • Espresso seleccionar niños del diseño incluido
  • Android Navigation Drawer y windowActionBarOverlay = true
  • java.io.IOException: SSL handshake failure: I/O error during system call, Broken pipe 

    Aquí es cómo inicializo el HttpClient:

      SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("http", new PlainSocketFactory(), 80)); registry.register(new Scheme("https", (trustAll ? new FakeSocketFactory() : SSLSocketFactory.getSocketFactory()), 443)); client = new DefaultHttpClient(new ThreadSafeClientConnManager(httpParams, registry), httpParams); 

    Hago uso de un FakeSocketFactory y FakeTrustManager, de los cuales la fuente se puede encontrar aquí .

    Una vez más, no entiendo por qué de repente dejó de trabajar, o incluso lo que el error 'Tubo roto' significa. He visto mensajes en Twitter que Seesmic y Twidroid fallan con SSL activado en FroYo también, pero no estoy seguro si está relacionado.

    Gracias por cualquier dirección / ayuda!

  • Diferencia entre targetSdkVersion y la meta de construcción del proyecto
  • Vista de lista de Android con el problema de la casilla de verificación
  • ¿Cómo puedo actualizar el cursor desde un CursorLoader?
  • Desactivar GoogleAnalytics de la aplicación Android cuando se prueban o desarrollan
  • Cómo convertir HashMap a json Array en android?
  • Uso de GoogleApiClient + LocationServices sin actualizar
  • 2 Solutions collect form web for “La manipulación SSL personalizada dejó de funcionar en Android 2.2 FroYo”

    Esta es la respuesta, con muchas, muchas gracias a un colaborador de Seesmic que está dispuesto a compartir la corrección:

    En la fábrica de socket personalizado, la creación de socket (con createSocket ) aparentemente ha cambiado específicamente para la implementación de SSLSocketFactory . Así que el viejo:

      @Override public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { return getSSLContext().getSocketFactory().createSocket(); } 

    Necesita ser cambiado a:

      @Override public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { return getSSLContext().getSocketFactory().createSocket(socket, host, port, autoClose); } 

    Y luego funcionó de nuevo para mí!

    ACTUALIZACIÓN: Como esta sigue siendo una respuesta popular, permítanme actualizar mi enlace al código de trabajo. Esta fábrica de socket habilitada para SSl que admite protocolos modernos (TLS 1.1+), SNI y opcionalmente permite aceptar todos los certificados (inseguro, ignora todos los certificados SSL) o certificados autofirmados (por hash SHA-1).

    Más información sobre este problema http://code.google.com/p/android/issues/detail?id=10472 Esto arregló el problema de SSL que teníamos para HTC Desire cuando actualizamos a Android 2.2

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.