Für meine App, Transdroid, verbinde ich mich über HTTP und optional sicher über HTTPS mit Remote-Servern. Für diese HTTPS-Verbindungen mit dem HttpClient verwende ich eine benutzerdefinierte SSL-Socket-Factory-Implementierung, um sicherzustellen, dass selbstsignierte Zertifikate funktionieren. Grundsätzlich akzeptiere ich alles und ignoriere jede Überprüfung eines Zertifikats.Benutzerdefinierte SSL-Behandlung funktioniert nicht mehr unter Android 2.2 FroYo
Dies funktioniert seit einiger Zeit gut, aber es funktioniert nicht mehr für Android 2.2 FroYo. Wenn die Verbindung versuchen, wird eine Ausnahme zurück:
java.io.IOException: SSL handshake failure: I/O error during system call, Broken pipe
Hier ist, wie ich die Httpclient initialisieren:
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);
ich nutzen eine FakeSocketFactory und FakeTrustManager, von denen die Quelle here finden .
Wieder verstehe ich nicht, warum es plötzlich aufgehört hat zu arbeiten, oder sogar was der Fehler 'Gebrochenes Rohr' bedeutet. Ich habe Nachrichten auf Twitter gesehen, dass Seesmic und Twidroid bei aktiviertem SSL auf FroYo ebenfalls fehlschlagen, bin aber unsicher, ob es verwandt ist.
Danke für alle Richtungen/Hilfe! Hier
ich das gleiche Problem. Vielen Dank für diese schnelle und einfache Lösung. –
Dieses Update löste das Problem für mich selbst nicht - ich fand, dass ich auch die Priorität des Threads, in dem die Socket-Verbindung hergestellt wurde, zu THREAD_PRIORITY_URGENT_AUDIO erhöhen musste (gefolgt von der Zurücksetzung der Priorität auf THREAD_PRIORITY_MORE_FAVORORABLE nach der Verbindung) etabliert). In diesem speziellen Fall vermute ich, dass eine Animation zu viel CPU verwendet :-( – tonys
wie tun Sie es tony? – Mikey