J'essaye d'envoyer une transaction POST de Xamarin.Forms en utilisant TLS1.2 mais je les vois arriver au serveur en tant que TLS 1.1.Impossible d'envoyer TLS 1.2 avec Xamarin.Forms et VisualStudio 2017
J'ai configuré les options Android:
HttpClient impletemtation comme Android
SSL/TLS mise en œuvre natif TLS 1.2+
Je suis mise en œuvre et l'exécution en VisualStudio 2017, et l'utilisation de Android 6.0 dans l'émulateur.
En ce qui concerne le code, je définirait des variables d'environnement:
System.Environment.SetEnvironmentVariable("MONO_TLS_PROVIDER", "btls");
System.Environment.SetEnvironmentVariable("XA_TLS_PROVIDER", "btls");
System.Environment.SetEnvironmentVariable("XA_HTTP_CLIENT_HANDLER_TYPE", "Xamarin.Android.Net.AndroidClientHandler");
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
Enfin, POST est envoyé avec:
using (HttpClient client = new HttpClient())
or
using (HttpClient client = new HttpClient(new NativeMessageHandler()))
or
using (HttpClient client = new HttpClient(new Xamarin.Android.Net.AndroidClientHandler()))
{
try
{
HttpResponseMessage responseHttp = await client.PostAsync(new Uri(new Uri(Constants.ApiBaseUrl), "authorize"), content);
...
Où Constants.ApiBaseUrl contient une URL avec https: // <> Format .
Le problème est, lorsque le POST est envoyé Je n'ai pas des exceptions, mais dans mon serveur, je vois avec Wireshark la transaction:
J'ai aussi essayé d'une autre manière, en utilisant:
HttpWebRequest httpWebRequest = WebRequest.CreateHttp(new Uri(new Uri(Constants.ApiBaseUrl), "authorize"));
httpWebRequest.Method = "POST";
httpWebRequest.Credentials = CredentialCache.DefaultNetworkCredentials;
Stream sw = httpWebRequest.GetRequestStream();
sw.Write(contentByte, 0, contentByte.Length);
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
Avec et sans mes propres certificats à l'aide:
httpWebRequest.ClientCertificates = cryptoSvc.x509HostCertificates;
Dans ce cas, si j'utilise
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
je reçois l'exception
RestService-SendJsonDataAsync ERROR: Error: SecureChannelFailure
(**Ssl error:100000f0:SSL routines:OPENSSL_internal:UNSUPPORTED_PROTOCOL**
at /Users/builder/jenkins/workspace/xamarin-android/xamarin-android/external/mono/external/boringssl/ssl/handshake_client.c:808)
Sans cette ligne, il arrive aussi que TLS1.1.
Est-ce que quelqu'un a une idée ou une suggestion sur ce qui ne va pas dans mon cas, s'il vous plaît?
Merci beaucoup pour votre temps et votre aide.
Merci pour votre commentaire @DanielMaclean, j'ai essayé sans ces lignes, mais avec le même résultat. D'un autre côté, mon serveur permet les deux connexions pour le moment. – santiPipes
Pouvez-vous essayer de désactiver 1.1 sur le serveur? – LewisT
Je ne peux pas, le serveur doit autoriser les deux connexions. Je me connecte avec des terminaux de paiement à ce serveur en utilisant TLS1.1 et TLS1.2 sans problèmes. – santiPipes