web-dev-qa-db-fra.com

Erreur: C # La connexion sous-jacente était fermée: Impossible d'établir une relation de confiance pour le canal sécurisé SSL/TLS

J'essaie de faire une demande via SSL. Le certificat est déjà installé sur la machine et fonctionne via un navigateur.

J'utilise cette demande:

System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byte[] data = encoding.GetBytes(request.Content.OuterXml.ToString());
string password = "XXXX";
X509Certificate2 cert = new X509Certificate2("c:\\zzzz.p12", password);
string key = cert.GetPublicKeyString();
string certData = Encoding.ASCII.GetString(cert.Export(X509ContentType.Cert));

Uri uri = new Uri(request.Url);
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(uri);
myRequest.Credentials = new NetworkCredential(request.User, request.Password.ToString());
myRequest.Method = "PUT";
myRequest.ContentType = request.ContentType;
myRequest.ContentLength = data.Length;
myRequest.ClientCertificates.Add(cert);

Stream newStream = myRequest.GetRequestStream();
newStream.Write(data, 0, data.Length);
newStream.Close();

System.IO.StreamReader st = new StreamReader(((HttpWebResponse)myRequest.GetResponse()).GetResponseStream());

En utilisant ce code je reçois cette erreur:

La connexion sous-jacente était fermée: Impossible d'établir la confiance relation pour le canal sécurisé SSL/TLS. ---> System.Security.Authentication.AuthenticationException: Le .__ distant. le certificat est invalide selon la procédure de validation.

Quel est le problème?

22
Roger G

J'ai résolu le problème avec ceci:

ServicePointManager.ServerCertificateValidationCallback = new        
RemoteCertificateValidationCallback
(
   delegate { return true; }
);
56
Roger G

Assurez-vous que votre certificat est correctement approuvé. Le certificat racine a-t-il été ajouté au magasin de certificats approprié (autorités de certification racines de confiance sur l'ordinateur local)?

J'ai rencontré cette erreur lorsque le certificat racine (propre) d'un certificat (auto-signé) avait été ajouté à l'autorité de certification racine de confiance de l'utilisateur actuel. Le déplacement du certificat racine vers le magasin d'autorité de certification racine sur l'ordinateur local a résolu mon problème.

0
bvgheluwe