Search code examples
c#asp.netsslhttpwebrequest

The request was aborted: Could not create SSL/TLS secure channel


My customer has informed my of issues with their SSL and Internet Explorer. They said they get trust issues when accessing the URL.

I am accessing JSON through HTTPS. The website sits on one server and I am using the console app on my local machine. I am trying to bypass the SSL Cert, however, my code still fails.

Can I alter HttpWebRequest to fix this problem?

I get this error using this code:

    // You must change the URL to point to your Web server.
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.Method = "GET";
        req.AllowAutoRedirect = true;

        // allows for validation of SSL conversations
        ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };


        WebResponse respon = req.GetResponse();
        Stream res = respon.GetResponseStream();

        string ret = "";
        byte[] buffer = new byte[1048];
        int read = 0;
        while ((read = res.Read(buffer, 0, buffer.Length)) > 0)
        {
            //Console.Write(Encoding.ASCII.GetString(buffer, 0, read));
            ret += Encoding.ASCII.GetString(buffer, 0, read);
        }
        return ret;

The request was aborted: Could not create SSL/TLS secure channel


Solution

  • I enabled logging using this code:

    http://blogs.msdn.com/b/dgorti/archive/2005/09/18/471003.aspx

    The log was in the bin/debug folder (I was in Debug mode for my console app). You need to add the security protocol type as SSL 3

    I received an algorithm mismatch in the log. Here is my new code:

            // You must change the URL to point to your Web server.
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "GET";
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
    
    
            // Skip validation of SSL/TLS certificate
            ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
    
    
            WebResponse respon = req.GetResponse();
            Stream res = respon.GetResponseStream();
    
            string ret = "";
            byte[] buffer = new byte[1048];
            int read = 0;
            while ((read = res.Read(buffer, 0, buffer.Length)) > 0)
            {
                Console.Write(Encoding.ASCII.GetString(buffer, 0, read));
                ret += Encoding.ASCII.GetString(buffer, 0, read);
            }
            return ret;