2016-05-14 3 views
14

У меня возникли проблемы, когда я хочу установить соединение с API Paypal Rest с помощью метода POST. Когда я не использую modernhttpclient я получил ошибкуSSLHandshakeException на Android 4.4 и ниже

The authentication or decryption has failed. 

Но когда я использую modernhttpclient это работает в Android API 23 (Зефир), и когда я проверить в Android API 19 (устройства) и API 16 (эмулятор) I Android получил ошибку

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

по ssl handshake exception android мне нужно использовать пользовательский сокет завода. Но как я могу реализовать его в HttpClient или modernHttpClient?

+0

Какую версию «Xamarin.Android» вы используете в настоящее время? – SushiHangover

+0

Xamarin.Android Версия: 6.1.0.56 (Xamarin Business) – albilaga

+0

Хорошо, мы используем Alpha 6.1.99.xxx и имеем аналогичную (но другую ;-) проблему и прибегаем к использованию «родного» Java API, т. Е. 'HttpURLConnection', чтобы делать наши сообщения из-за проблем с HttpClient с публикациями' Stream' и получить проблему с потоком Java IO. Пропуск платформы .Net решил это для нас. – SushiHangover

ответ

6

Не уверен, что если я могу полностью ответить на ваш вопрос, но я дам ему попробовать:

Если проанализировать конечную точку Paypal REST API, например, с помощью SSL Labs, как так https://www.ssllabs.com/ssltest/analyze.html?d=api.sandbox.paypal.com&hideResults=on, вы видите, что они только поддержку протокол TLS 1.2.

Теперь Android поддерживает это с уровня API 16, как вы можете видеть здесь https://developer.android.com/reference/javax/net/ssl/SSLSocket.html, но он по умолчанию отключен, и только в Уровнях API 20+ они включили его.

В Xamarin форумов кто-то разместил решение для обеспечения TLS 1.2 для Android с API уровнями 16 до 19 по разветвлению ModernHttpClient и добавив улучшенный сокет SSL завода: https://forums.xamarin.com/discussion/63005/modernhttpclient-tls-1-2-android-api-19

Это должно исправить проблему с этой Android версией, но это не поможет вам с версиями до Android 4.1.

0

В основном эта проблема возникает, когда SSL на стороне сервера есть сломанная цепь, сервер должен включать полную цепь и включать промежуточную Корневую цепь,

для получения дополнительной информации, пожалуйста, имеет ссылку на эту ссылку.

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

1

Вы можете использовать ProviderInstaller из сервисов Google Play, он заменяет поставщик системы SSL с более свежим, предоставленным Google:

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

я инициализировать его в OnCreate () моего приложения и эта ошибка исчезла. Я уверен, что вы это сделаете от Xamarin.

Смежные вопросы