Schon wieder einen guten Monat her, dass ich hier geschrieben habe, aber wenn man sich auch mit solchen, wie den folgenden Problemen rumschlagen muss, ist es ja kein Wunder, dass man nicht mehr zum Schreiben von Blogbeiträgen kommt. :)
Folgende Problematik:
In unserer neuen Android App benutzen wir einen REST-Webservice, der über SSL angesprochen wird. Soweit für Android auch kein Problem, nur benutzen wir auf Serverseite ein SSL-Zertifikat von Telesec welches als Root Zertifikat auf Baltimore Cybertrust verweist.
Jetzt würde man denken, na und, ist doch egal, Baltimore ist doch, neben zB. Verisign (was von Google selbst benutzt wird) eine bekannte Zertifizierungsstelle und ein von dort abgesichertes Zertifikat wird jawohl als Standard in jedem Betriebssystem enthalten sein ...
Tja, dieser gemeldete Bug beim Android-Tem aus dem Juni 2010 sagt darüber etwas ganz anderes:
http://code.google.com/p/android/issues/detail?id=9269
So also auch in unserem Fall. Unsere Android-Anwendung hängte sich immer wieder mit einer internen Android Fehlermeldung über ein ungültiges Zertifikat auf Serverseite auf.
Wenn man mit dem HandyBrowser direkt auf die Seite unseres Webservice gesurrft ist, kam natürlich auch eine SSL-Fehlermeldung, diese kann man im Browser aber wegklicken, und die entsprechende Seite trotzdem besuchen.
Innerhalb einer eigenen Anwendung gibt es diese Möglichkeit so nicht, und da die Antwort auf das Baltimore Root CA Problem von Seiten Google erst ein Jahr später kam (siehe Issue oben) und die Antwort darin bestand, doch bitte Android 2.3 zu nutzen, da erst dort das Root CA von Baltimore eingebaut wurde, war für uns, die wir auch noch Handys mit Android 2.1 unterstützen wollen, erstmal guter Rat teuer.
Zum Glück hat sich ein findiger Entwickler aus Lichtenstein diesem Problem angenommen und dafür eine Lösung entwickelt, um das Problem zu umgehen.
Hier der Blogbeitrag, der beschreibt, wie man sich ein eigenes Zertifikat in einem selbst erstellten Keystore im Ressourcen Verzeichnis seiner Android-Anwendung ablegt, und wie man dieses Zertifikat dann benutzt, um über einen eigenen WebserviceClient seinen SSL-gesicherten Webservice zu benutzen.
http://blog.antoine.li/index.php/2010/10/android-trusting-ssl-certificates/
Ich werde im Folgenden unsere Umsetzung beschreiben und mich dabei stark an den hier genannten Artikel anlehnen, da dieser auch mir bei der Impementierung als Vorlage geholfen hat.
###






