使用自签名证书的内容长度为 -1 但内容正确
Posted
技术标签:
【中文标题】使用自签名证书的内容长度为 -1 但内容正确【英文标题】:Content length using self-signed certificates is -1 but content is correct 【发布时间】:2021-10-28 07:25:43 【问题描述】:在开发我的 C# .NET 4.0 代码时,我需要接受自签名 SSL 证书,并且我使用了来自 https://***.com/a/18624335/1166898 的以下代码
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
然后我在后面的代码中调用这个方法:
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
当连接受信任时,response.ContentLength
返回正确的长度,但是,当连接不受信任时,response.ContentLength
是 -1
。实际内容在这两种情况下都是正确的。
如何通过不受信任的(自签名)连接获得正确的 response.ContentLength
?
【问题讨论】:
【参考方案1】:我认为response.ContentLength = -1
的问题不是由不受信任的(自签名)连接引起的。
我使用带有自签名证书的本地 Web 应用程序尝试了代码,ContentLength
具有正值。
在文档中,值 -1 仅仅是因为
响应中未设置 Content-Length 标头
https://docs.microsoft.com/en-us/dotnet/api/system.net.httpwebresponse.contentlength?redirectedfrom=MSDN&view=net-5.0#System_Net_HttpWebResponse_ContentLength
我用 *** url 尝试了这个,ContentLength
回来了 -1
string url = "https://***.com/";
HttpWebRequest request = WebRequest.CreateHttp(url);
request.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Console.WriteLine($"Content length is : response.ContentLength");
【讨论】:
我认为你是对的,但我无法弄清楚如何让 Windows 上的 Apache 始终返回Content-Length
。我在Server Fault 上提出了一个新问题。以上是关于使用自签名证书的内容长度为 -1 但内容正确的主要内容,如果未能解决你的问题,请参考以下文章