C# Webrequest通过HTTP而不是HTTPS(SSL)工作

C# Webrequest通过HTTP而不是HTTPS(SSL)工作,c#,rest,ssl,webrequest,C#,Rest,Ssl,Webrequest,我们有一个rest服务,它可以在http上正常工作。我使用以下C#代码向其发布数据: string postData = [contains the data to post] ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; var baseAddress = "http://www.myserver.net/rest/saveData"; S

我们有一个rest服务,它可以在http上正常工作。我使用以下C#代码向其发布数据:

    string postData = [contains the data to post]
    ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
    var baseAddress = "http://www.myserver.net/rest/saveData";
    System.Net.WebRequest req = System.Net.WebRequest.Create(baseAddress);
    string authInfo = "username:password";
    authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
    req.Headers["Authorization"] = "Basic " + authInfo;
    req.ContentType = "application/x-www-form-urlencoded";
    req.Method = "POST";

    byte[] bytes = System.Text.Encoding.ASCII.GetBytes(postData);
    req.ContentLength = bytes.Length;

    System.IO.Stream os = req.GetRequestStream();
    os.Write(bytes, 0, bytes.Length); //Push it out there
    os.Close();

    System.Net.WebResponse resp = req.GetResponse();
    var s = resp.GetResponseStream();

    var sr = new System.IO.StreamReader(s);
    var r= sr.ReadToEnd().Trim();
现在,如果将此更改为SSL,则将http调用替换为https调用:

"https://www.myserver.net/rest/saveData";
这不起作用,因为它在GetResponse调用时超时。首先,我认为是由自签名证书引起的,但我使用的不是这种情况:

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
它接受所有证书。我得到的错误类似于transportlayer上返回的零字节(它是用我的语言编写的,所以我不知道英语中的异常是什么)

我在命令行上使用CURL来测试调用,在那里它可以在http和SSL上工作,所以rest服务看起来很好

有人知道为什么它不能通过SSL工作吗


谢谢

我找到了问题的原因。rest服务正在使用SSL3而不是TLS。通过添加以下代码:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

问题解决了。

使用Wireshark之类的工具,找出浏览器和程序请求的差异。我现在就做