2012-06-27 3 views
19

Ich versuche, eine Anforderung über SSL zu machen etablieren. Das Zertifikat ist bereits auf dem Computer installiert und funktioniert über den Browser.Fehler: C# Die zugrunde liegende Verbindung wurde geschlossen: Es konnte keine Vertrauensstellung für den sicheren SSL/TLS-Kanal

ich diese Anfrage ist mit:

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()); 

diesen Code verwende ich diesen Fehler:

The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.

Was ist das Problem?

+1

haben einen Blick auf dieses Thema, mayb es u http://stackoverflow.com/questions/703272/could-not-establish-trust-relationship-for-ssl-tls-secure- helfen Kanal-Seife – JohnnBlade

+0

Dank Johnn Klingen –

+0

Mögliches Duplikat [C# Zertifikat Fehler ignorieren?] (http://stackoverflow.com/questions/2675133/c-sharp-ignore-certificate-errors) –

Antwort

45

löste ich das Problem mit diesem:

ServicePointManager.ServerCertificateValidationCallback = new   
RemoteCertificateValidationCallback 
(
    delegate { return true; } 
); 
+13

Diese Lösung potenzielles Sicherheitsrisiko wie Sie sein könnte deaktivieren die SSL-Zertifikatsprüfung. Wenn dies der Produktionscode ist, verstehen Sie das Risiko des Servers, zu dem Sie eine Verbindung herstellen. – Amzath

+0

Wie kann dies in Windows Phone 8 getan werden? Servicepoint ist nicht in der Referenz http://cmsresources.windowsphone.com/devcenter/en-us/downloads/064028-microsoft-poster.pdf –

+1

Das Problem mit mir passiert, wenn Anfragen von meiner app durch Fiddler schleusen. Und das Hinzufügen des Delegiertentricks, um das Zertifikat nicht zu validieren, hat mir geholfen, meinen Anruf erfolgreich auszuführen und die Antwort in Fiddler zu sehen. –

-3

Dies ist Client-Code, nicht wahr? Und Sie greifen auf eine HTTPS-URL zu, nicht wahr? Ich denke, das Problem liegt beim Serverzertifikat, das der clientseitige TLS-Stack nicht validieren kann. Wenn Sie über den Browser eine Verbindung zu dieser URL herstellen, funktioniert dies reibungslos oder wird eine Warnung angezeigt, wenn das Zertifikat nicht übereinstimmt?

+0

Ja, das ist ein Client-Code. Ja im Zugriff über https. Wenn ich mich im Browser verbinde, funktioniert es reibungslos und es wird keine Warnung angezeigt. –

+0

Wenn Sie sich mit Netzwerkanalysatoren (zB Wireshark of NetMon) wohl fühlen, können Sie einfach Ihren Verkehr schnüffeln und sehen, mit welchem ​​Host Sie wirklich sprechen, welches Zertifikat es tut vorhanden und wenn der TLS-Handshake mit oder ohne Fehler abgeschlossen wird. Ansonsten ist der Link, den Sie als Referenz bekommen haben, ein guter Anfang. Wenn dies nicht hilft können Sie beginnen, hier mehr zu verschütten und weitere Informationen zu Ihrer Einrichtung (URL Sie zugreifen, Zertifikat auf dem Server installiert ist, Netzwerkkonfiguration - Proxys usw.) – Kastorskij

0

Stellen Sie sicher, Ihr Zertifikat richtig vertrauenswürdig ist. Wurde das Stammzertifikat dem richtigen Zertifikatspeicher hinzugefügt (Vertrauenswürdige Stammzertifizierungsstellen auf dem lokalen Computer)?

ich diesen Fehler festgestellt, wenn das (eigene gemacht) Stammzertifikat für ein Zertifikat (selbst signierten) hatte das Root-CA für die aktuellen Benutzer) Trusted hinzugefügt. Durch das Verschieben des Stammzertifikats in den Stammzertifizierungsstellen-Speicher auf der lokalen Maschine wurde mein Problem gelöst.

Verwandte Themen