How to use HTTP GET request in C# with SSL? (protocol violation)

后端 未结 3 1825
走了就别回头了
走了就别回头了 2020-12-13 22:55

I am currently trying to get a response from a server that is using SSL in C#. I have the code to do this in Java, but it looks like they do not translate 1:1.

I

相关标签:
3条回答
  • 2020-12-13 23:27

    Here is some test code that I have used successfully for testing SSL connections...

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.dscoduc.com");
    //request.Method = "HEAD";
    //request.AllowAutoRedirect = false;
    request.Credentials = CredentialCache.DefaultCredentials;
    
    // Ignore Certificate validation failures (aka untrusted certificate + certificate chains)
    ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true); 
    
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    Stream resStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(resStream);
    string responseFromServer = reader.ReadToEnd();
    
    0 讨论(0)
  • 2020-12-13 23:39

    HTTP conversations over SSL use a properly issued certificate for validation.

    You could use the RemoteCertificateValidationCallback delegate for validating the SSL certificate as follows:

    public static void ConnectSSL()
    {
    
        WebRequest request = WebRequest.Create("https://" + sslServerHost + ":" + sslServerPort);
        request.Proxy = null;
        request.Credentials = CredentialCache.DefaultCredentials;
    
       //allows for validation of SSL certificates 
    
        ServicePointManager.ServerCertificateValidationCallback += new  System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate);
    
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        string responseFromServer = reader.ReadToEnd();
    
    }
    
    //for testing purpose only, accept any dodgy certificate... 
    public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
    {
              return true; 
    }
    
    0 讨论(0)
  • 2020-12-13 23:48

    Just an idea, but have you tried it with a final "/"? Also - you might find this approach easier:

    string s;
    using(WebClient client = new WebClient()) {
        client.UseDefaultCredentials = true;
        s = client.DownloadString("https://" + sslServerHost + ":"
           + sslServerPort + "/");
    }
    
    0 讨论(0)
提交回复
热议问题