Para mi aplicación, Transdroid, me estoy conectando a servidores remotos a través de HTTP y opcionalmente de manera segura a través de HTTPS. Para estas conexiones HTTPS con HttpClient, estoy usando una implementación de fábrica de sockets SSL personalizada para asegurarme de que los certificados autofirmados funcionen. Básicamente, acepto todo e ignoro cada comprobación de cualquier certificado.El manejo personalizado de SSL dejó de funcionar en Android 2.2 FroYo
Esto ha estado funcionando bien desde hace un tiempo, pero ya no funciona para Android 2.2 FroYo. Al intentar conectar, devolverá una excepción:
java.io.IOException: SSL handshake failure: I/O error during system call, Broken pipe
Así es como puedo inicializar 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);
que hacen uso de un FakeSocketFactory y FakeTrustManager, de los cuales la fuente se puede encontrar here .
Una vez más, no entiendo por qué de repente se detuvo el trabajo, o incluso lo que significa el error 'Pipa rota'. He visto mensajes en Twitter de que Seesmic y Twidroid fallan con SSL habilitado en FroYo también, pero no estoy seguro de si está relacionado.
¡Gracias por cualquier instrucción/ayuda!
que estaba teniendo el mismo problema. Muchas gracias por esta solución rápida y fácil. –
Esta solución no resuelve el problema para mí por sí mismo - me encontré con que tenía que aumentar también la prioridad del hilo en el que se está estableciendo la conexión de socket a THREAD_PRIORITY_URGENT_AUDIO (seguido por el establecimiento de la prioridad de nuevo a THREAD_PRIORITY_MORE_FAVORABLE vez que la conexión ha sido establecido). En este caso específico, sospecho que una animación estaba usando demasiada CPU :-( – tonys
, ¿cómo lo haces? – Mikey