Für eine Android-App, die mit einem Service kommunizieren muss, wollte ich den Zugriff via HttpClient
implementieren. Der Zugriff funktionierte nicht. Anfangs gab es Exceptions aus der Java-Welt, und ich dachte schon daran, dass das eventuell an der Verwendung einer PCL (Portable Class Library) lag. Eine kurze Recherche zeigte, dass viele andere dies sehr wohl in derselben Konstellation verwenden. Also muss es wohl ein anderes Problem sein.
Da ich die Zugriffe via TLS (manche sagen SSL, meinen aber TLS) durchführte, testete ich das mal kurz ohne und schon lief es. Also TLS wieder aktiviert und einen genaueren Blick auf die Exception geworfen:
The authentication or decryption has failed
Hmm. Könnte ein Fehler in der Validierung sein. In der Testumgebung hatte ich ein self-signed Zertifikat am Laufen. Am Live-System nicht, dort lief es allerdings auch nicht. Vorerst dachte ich mir nichts weiter dabei und konfigurierte einen Callback für die Validierung:
ServicePointManager .ServerCertificateValidationCallback +=
(sender, cert, chain, sslPolicyErrors) =>
{
return true;
};
Der Callback wurde aber nie aufgerufen.
Also habe ich mir schlussendlich die unterstützten Cipher angesehen. Hier scheint es nun so zu sein, dass Mono Diffie Hellman (alles was auf DH endet) grundsätzlich nicht unterstützt. AES256 wurde in früheren Android-Versionen unterstützt, in den neueren aber nur mehr der schwächere AES128 (is ja auch geil, oder?) Hier dazu ein wenig Kontext. Und nun dürft ihr raten welche Cipher für die von mir verwendeten Zertifikate aktiv/erlaubt waren? Ausschließlich DH und AES256. Also musste ich nun AES128 aktivieren und schon lief alles perfekt. Zwar habe ich keine große Freude damit, aber eine andere Lösung habe ich derzeit nicht parat.
Wer also die oben beschriebene Exception bekommt sollte zuerst die unterstützten Cipher ansehen und erst dann weitere Tests/Recherchen anstellen, das könnte Zeit sparen.
Wirf mal einen Blick auf ModernHttpClient. Der sollte alle Sorgen verfliegen lassen.
Danke für den Hinweis. ModernHttpClient hatte ich probiert, funktionierte allerdings auch nicht. Erst nachdem ich AES128 zugelassen habe ging das. Zudem brauche ich bei ModernHttpClient die Pro-Variante, damit ich mit self-signed Zertifikaten (Test-Umgebung) arbeiten kann. Da wollte ich zuerst wissen was los ist.