web-dev-qa-db-fra.com

SSLHandshakeException sur Android 4.4 et inférieur

J'ai un problème lorsque je veux me connecter à l'API Paypal Rest avec la méthode POST. Quand je n'utilise pas modernhttpclient, j'ai une erreur

The authentication or decryption has failed. 

Mais lorsque j'utilise modernhttpclient, cela fonctionne dans l'API Android 23 (Marshmallow) et lorsque je teste dans l'API Android 19 (appareil) et l'API Android 16 (émulateur), une erreur s'est produite.

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

Selon exception de négociation ssl Android Je dois utiliser une fabrique de prises personnalisée. Mais comment puis-je l'implémenter dans HttpClient ou modernHttpClient?

15
albilaga

Je ne suis pas sûr de pouvoir répondre parfaitement à votre question, mais je vais essayer:

Si vous analysez le point de terminaison de l'API Paypal REST _, par exemple avec les laboratoires SSL tels que/ https://www.ssllabs.com/ssltest/analyze.html?d=api.sandbox.Paypal.com&hideResults= sur , vous voyez qu'ils ne prennent en charge que le protocole TLS 1.2.

Maintenant, Android prend en charge cela depuis le niveau 16 de l'API, comme vous pouvez le voir ici https://developer.Android.com/reference/javax/net/ssl/SSLSocket.html , mais il est désactivé par défaut et uniquement dans Les niveaux d’API 20+ ils l’ont activé.

Dans les forums Xamarin, quelqu'un a publié une solution permettant d'activer TLS 1.2 pour Android avec les niveaux d'API 16 à 19 en forçant ModernHttpClient et en ajoutant une fabrique de socket SSL améliorée: https://forums.xamarin.com/discussion/63005/modernhttpclient-tls -1-2-Android-api-19

Cela devrait résoudre votre problème avec ces versions Android, mais cela ne vous aidera pas avec les versions antérieures à Android 4.1.

8
Florian Haider

Vous pouvez utiliser le ProviderInstaller à partir des services Google Play. Il remplace le fournisseur SSL du système par un fournisseur plus récent fourni par Google:

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

Je l'initialise dans la onCreate () de mon application et cette erreur a disparu. Je suis sûr que vous pouvez faire cela de Xamarin.

1
stephane k.

Fondamentalement, ce problème survient lorsque la chaîne SSL côté serveur a une chaîne cassée. Le serveur doit inclure la chaîne complète et inclure la chaîne racine intermédiaire.

pour plus d'informations s'il vous plaît avoir une référence à ce lien.

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

0
Nitin Jain