使用自签名证书的内容长度为 -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 但内容正确的主要内容,如果未能解决你的问题,请参考以下文章

自签名证书:私钥问题

数字签名错误 - 签名长度不正确:得到344但期望256

sh 笔记:OpenSSL生成「自签名」证书,配置Nodejs本地HTTPS服务 - 4.查看.crt文件内容

验证设备的自签名证书

wget、自签名证书和自定义 HTTPS 服务器

一个自签名证书来统治他们? Chrome、Android 和 iOS