2016-05-14 5 views
14

Ich habe ein Problem, wenn ich mit Paypal Rest API mit POST-Methode verbinden möchte. Wenn ich nicht modernhttpclient bin mit bekam ich FehlerSSLHandshakeException auf Android 4.4 und niedriger

The authentication or decryption has failed. 

Aber wenn ich modernhttpclient verwende es in Android API 23 (Eibisch) arbeiten und wenn ich testen, in Android API 19 (Gerät) und Android API 16 (Emulator) I erhielt Fehler

ex {Javax.Net.Ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=…} Javax.Net.Ssl.SSLHandshakeException 

nach ssl handshake exception android ich brauche benutzerdefinierten Socket-Factory zu verwenden. Aber wie kann ich es in HttpClient oder modernHttpClient implementieren?

+0

Welche Version von 'Xamarin.Android' verwenden Sie derzeit? – SushiHangover

+0

Xamarin.Android Version: 6.1.0.56 (Xamarin Business) – albilaga

+0

Ok, wir verwenden die Alpha 6.1.99.xxx und haben ein ähnliches (aber anderes ;-) Problem und haben auf die Verwendung der "nativen" Java API zurückgegriffen, dh 'HttpURLConnection', um unsere Posts aufgrund' HttpClient' Probleme mit Postings eines 'Stream's zu tun und ein Java IO Ende des Stream Problems zu bekommen. Überspringen des .Net-Frameworks löste es für uns. – SushiHangover

Antwort

6

nicht sicher, ob ich voll und ganz Ihre Frage beantworten kann, aber ich werde es versuchen:

Wenn Sie den Paypal-REST-API-Endpunkt zu analysieren, zum Beispiel mit SSL Labs wie so https://www.ssllabs.com/ssltest/analyze.html?d=api.sandbox.paypal.com&hideResults=on, Sie sehen sie nur Unterstützung das TLS 1.2-Protokoll.

Jetzt unterstützt Android dies seit API Level 16, wie Sie hier sehen können https://developer.android.com/reference/javax/net/ssl/SSLSocket.html, aber es ist standardmäßig deaktiviert und nur in API-Stufen 20+ aktiviert sie es.

Im Xamarin Foren jemand geschrieben, eine Lösung für TLS ermöglicht 1.2 für Android mit API-Ebenen 16 bis 19 von ModernHttpClient gabeln und dem Hinzufügen einer verbesserte SSL Socket-Factory: https://forums.xamarin.com/discussion/63005/modernhttpclient-tls-1-2-android-api-19

Ihr Problem mit den Android-Versionen beheben soll, Aber es wird Ihnen nicht mit Versionen vor Android 4.1 helfen.

1

Sie die ProviderInstaller von Google Play-Dienste verwenden können, ersetzt es das System SSL-Anbieter mit einer aktuelleren einer von Google zur Verfügung gestellt:

https://developer.android.com/training/articles/security-gms-provider.html

ich es in der onCreate initialisiert werden () meiner Anwendung und dieser Fehler ist weg. Ich bin mir sicher, dass du das irgendwie von Xamarin aus tun kannst.