2016-05-14 42 views
14

Mam problem, gdy chcę połączyć się z API Paypal Rest z metodą POST. Gdy nie używam modernhttpclient mam błądSSLHandshakeException na Androidzie 4.4 i niższym

The authentication or decryption has failed. 

Ale kiedy używam modernhttpclient pracować w Android API 23 (Zefir) i podczas badania w Android API 19 (urządzenia) i Android API 16 (emulatora) I mam błąd

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

Według ssl handshake exception android muszę użyć niestandardowego fabryki gniazda. Ale jak mogę zaimplementować go w HttpClient lub modernHttpClient?

+0

Jaką wersję "Xamarin.Android" aktualnie używasz? – SushiHangover

+0

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

+0

Ok, używamy Alpha 6.1.99.xxx i mamy podobny (ale inny ;-) problem i uciekliśmy się do używania "natywnego" API Java, tj. 'HttpURLConnection' do wykonywania naszych postów z powodu problemów' HttpClient' z księgowaniem 'Stream' i otrzymaniem problemu z końcowym strumieniem Java IO. Pomijanie architektury .Net rozwiązało go dla nas. – SushiHangover

Odpowiedz

6

Nie jestem pewien, czy mogę w pełni odpowiedzieć na to pytanie, ale dam jej spróbować:

Jeśli analizować punkt końcowy REST API Paypal, na przykład z Labs SSL podobnie jak https://www.ssllabs.com/ssltest/analyze.html?d=api.sandbox.paypal.com&hideResults=on, widzisz w nich tylko wsparcie protokół TLS 1.2.

Teraz Android obsługuje tę funkcję od poziomu interfejsu API 16, co można zobaczyć tutaj: https://developer.android.com/reference/javax/net/ssl/SSLSocket.html, ale jest domyślnie wyłączone i tylko na poziomach API powyżej 20+ je włączono.

W Xamarin forów ktoś pisał rozwiązanie dla umożliwienia TLS 1.2 dla Androida z poziomów API 16 do 19 przez rozwidlone ModernHttpClient i dodanie ulepszonego fabryki gniazda SSL: https://forums.xamarin.com/discussion/63005/modernhttpclient-tls-1-2-android-api-19

To powinno rozwiązać problem z tymi wersjami Androida, ale to nie pomoże ci w wersjach przed Androidem 4.1.