code it

Martins Tech Blog

SSLPeerUnverifiedException in Verbindung mit Android und IIS8

Das Backend für meine App sollt nur über eine https-Verbindung erreichbar sein. Alles kein Problem dachte ich mir, schnell ein SSL-Zertifikat besorgt und dieses der https-Bindung der Webanwendung zugewiesen. Alles kein Problem und auch der Browser zeigt das kleine grüne Schloss an und der Zertifizierungspfad war ok.

Um so überraschter war ich, dass meine Android App nun jeden Request mit einer Exception quittierte: 
javax.net.ssl.SSLPeerUnverifiedException (SSL peer not authenticated)

Laut Dokumentation passiert das, wenn man ein selbst signiertes Zertifikat verwendet und die Tipps im Web sind sehr breit gestreut - unter anderem "stelle den HttpClient doch so ein, dass er allen Zertifikaten vertraut". Das hilft bei selbst signierten Zertifikaten für eine Demo sicher, für eine echte App mit Kundendaten verwende ich diesen Tipp lieber nicht.

Was war nun aber Ursache für das Problem? Ich hatte im IIS in der https-Bindung den Haken bei "Require Server Name Indication (SNI)" gesetzt. Diese Einstellung sorgt eigentlich dafür, dass sich mehrere verschlüsselt abrufbare Websites unterschiedlicher Domains einen Server mit nur einer IP Adresse teilen können. Allerdings können ältere Browser damit Probleme haben. Offenbar zählt der HttpClient in Android / Java dazu, denn kaum hatte ich den Haken entfernt, ließ sich problemlos auf meine REST-API über HTTPS zugreifen.

Update 14.08.2015
Nach einiger Recherche habe ich nun herausgefunden, dass die neueren HttpClients durchaus in der Lage sind, mit SNI umzugehen. In der App in der das Problem auftrat hatte ich Spring for Android in der Version 1 verwendet. Der HttpClient dort hat das Problem mit SNI. Die neuere Version 2 von Spring for Android verwendet einen HttpClient, der problemlos damit umgehen kann.
Sie benötigen Unterstützung bei der Umsetzung Ihrer Projekte?
Ich bin käuflich. Nehmen Sie mit mir Kontakt auf.

Kommentar schreiben

Loading