Xamarin: Keine Verbindung via TLS mit HttpClient unter Android

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.

Veröffentlicht von Norbert Eder

Ich bin ein leidenschaftlicher Softwareentwickler. Mein Wissen und meine Gedanken teile ich nicht nur hier im Blog, sondern auch in Fachartikeln und Büchern.

Beteilige dich an der Unterhaltung

2 Kommentare

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

    1. 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.

Cookie-Einstellungen
Auf dieser Website werden Cookie verwendet. Diese werden für den Betrieb der Website benötigt oder helfen uns dabei, die Website zu verbessern.
Alle Cookies zulassen
Auswahl speichern
Individuelle Einstellungen
Individuelle Einstellungen
Dies ist eine Übersicht aller Cookies, die auf der Website verwendet werden. Sie haben die Möglichkeit, individuelle Cookie-Einstellungen vorzunehmen. Geben Sie einzelnen Cookies oder ganzen Gruppen Ihre Einwilligung. Essentielle Cookies lassen sich nicht deaktivieren.
Speichern
Abbrechen
Essenziell (1)
Essenzielle Cookies werden für die grundlegende Funktionalität der Website benötigt.
Cookies anzeigen