We were unable to connect to the HTTPS server using WebRequest due to the following error message:
The request was aborted: Could not create SSL/TLS secure channel.
We know that the server does not have a valid HTTPS Certificate in the path used, but in order to bypass this problem, we used the following code obtained from another StackOverflow post:
private void Somewhere() { ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(AlwaysGoodCertificate); } private static bool AlwaysGoodCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors) { return true; }
The problem is that the server will never validate the certificate and will fail due to the above errors. Who knows what I should do?
I should mention that a colleague and I tested it a few weeks ago, and similar to what I wrote above, it worked well. The only "major difference" we found was that I used Windows 7, and he used Windows XP. Will that change?
#1 building
Another possibility is that the certificate on the box is not entered correctly. Make sure the circled check box is selected. I didn't do this initially, so the code either timed out or threw the same exception as it couldn't find the private key.
#2 building
As you know, there may be many reasons. Thought I would add the reason why I met
This exception is thrown if the value of WebRequest.Timeout is set to 0. Here is my code... (in addition to hard coding the timeout value to 0, I have a parameter that is accidentally set to 0).
WebRequest webRequest = WebRequest.Create(@"https://myservice/path"); webRequest.ContentType = "text/html"; webRequest.Method = "POST"; string body = "..."; byte[] bytes = Encoding.ASCII.GetBytes(body); webRequest.ContentLength = bytes.Length; var os = webRequest.GetRequestStream(); os.Write(bytes, 0, bytes.Length); os.Close(); webRequest.Timeout = 0; //setting the timeout to 0 causes the request to fail WebResponse webResponse = webRequest.GetResponse(); //Exception thrown here ...
#3 building
If the server is returning an unauthorized HTTP 401 response to an HTTP request, an "request aborted: unable to create SSL / TLS secure channel" exception occurs.
You can determine if this is happening by opening the trace level System.Net logging for the client application, such as The answer .
After logging is set up, run the application and reproduce the error, then look for the following lines in the logging output:
System.Net Information: 0 : [9840] Connection#62912200 - Received status line: Version=1.1, StatusCode=401, StatusDescription=Unauthorized.
In my case, I was unable to set a specific cookie that the server expected, which caused the server to respond to the request with a 401 error, resulting in an "unable to create SSL / TLS secure channel" exception.
#4 building
I'm trying to visit When https://ct.mob0.com/Styles/Fun.png This is CloudFlare's image distributed on CDN, which supports crazy things like SPDY and strange redirected SSL certificates.
Instead of specifying Ssl3 as in the Simons answer, I can fix it by dropping to Tls12 like this:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; new WebClient().DownloadData("https://ct.mob0.com/Styles/Fun.png");
#5 building
As long as this is a relatively "live" link, I want to add a new option. This possibility is due to a problem with the Poodle attack, which no longer supports SSL 3.0. View a Google statement about this content. I ran into this problem on several Web services at a time and realized that it had to continue. I switched to TLS 1.2 and everything was back.
http://googleonlinesecurity.blogspot.com/2014/10/this-poodle-bites-exploiting-ssl-30.html