web-dev-qa-db-fra.com

Demande Web C # avec RestSharp - "La demande a été abandonnée: impossible de créer un canal sécurisé SSL/TLS"

J'ai une requête web incroyablement simple avec RestSharp:

var client = new RestClient("https://website.net");
var request = new RestRequest("/process", Method.GET);
request.AddParameter("cmd", "execute");
IRestResponse response = client.Execute(request);

var content = response.Content;
Console.WriteLine("Response: " + content);

Cela renvoie le message d'erreur:

La demande a été abandonnée: impossible de créer le canal sécurisé SSL/TLS

Trois choses:

  1. Je reçois la réponse que j'attends via un navigateur,
  2. Je reçois la réponse que j'attends par Postman,
  3. Cette demande est en cours d'envoi dans un environnement de test, mais je peux l'envoyer dans un environnement de production, qui a une adresse très similaire, et obtenir la réponse que j'attends
  4. Je suis convaincu que cela a fonctionné avant aujourd'hui.

Leur certificat utilise TLS 1.2 avec AES 128, il n’est donc pas lié aux erreurs causées par RC4.

Cela se trouve sur mon ordinateur Win 10 local dans Visual Studio 2015 avec un framework cible de .NET 4.5.2.

Pourquoi ai-je cette erreur?

MODIFIER:

En changeant mon code pour utiliser la base System.Net et la classe WebRequest et en ajoutant la ligne:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

comme suggéré de ici , cela fonctionne. Donc je suppose que RestSharp utilise le protocole incorrect pour une raison quelconque?

3
Gerald

Dans .NET 4.5, TLS 1.2 est disponible mais n'est pas activé par défaut.

Donc, oui, si vous avez besoin de 1.2, vous devrez le spécifier d'une manière ou d'une autre pour l'exécution de .NET.

FYI: Dans .NET 4.7, .NET utilisera la version SSL/TLS par défaut du système d’exploitation (la plupart des systèmes d’exploitation modernes auront TLS 1.2 par défaut).


Autre bien SO Réponse:

SecurityProtocol par défaut dans .NET 4.5

2
mmcrae

déplacez cette ligne: ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

avant cette ligne: WebRequest request = WebRequest.Create (url);

J'espère que cela pourra aider.

1
user2686690