在服务器端获取 SSL 错误SSL_ERROR_RX_RECORD_TOO_LONG

Get SSL error SSL_ERROR_RX_RECORD_TOO_LONG in server side

提问人:Reza Akraminejad 提问时间:1/1/2019 最后编辑:Uwe KeimReza Akraminejad 更新时间:4/18/2020 访问量:12919

问:

我用 C# 编写了自己的 Web 服务器。

我总是在端口 443 上的新 IP 中为我的网站建立 SSL 证书。而且它总是工作正常。

但是这次我收到这个错误:

安全连接失败

连接到 www.sayehrooshan-co.com 期间发生错误。SSL 收到的记录超出了允许的最大长度。错误代码:

SSL_ERROR_RX_RECORD_TOO_LONG

无法显示您尝试查看的页面,因为无法验证所接收数据的真实性。 请联系网站所有者,告知他们此问题。

这是页面地址:

https://www.sayehrooshan-co.com

这是我的代码,始终适用于其他站点的.pfx文件:

sslstream = new SslStream(new NetworkStream(mySocket, false), false);
//commented for nedaye arzhang
X509Certificate2 serverCertificate = new X509Certificate2(Path, Password);
//X509Certificate2 serverCertificate = new X509Certificate2("www_nedaye-arzhang_com.cer");                           

sslstream.AuthenticateAsServer(serverCertificate, false, System.Security.Authentication.SslProtocols.Tls, true);

搜索了很多,但没有得到任何解决方案 有人知道吗?

C# SSL SSL 证书

评论


答:

1赞 Crick3t 1/1/2019 #1

不仅仅是C#,Firefox也显示相同的错误消息。

“错误代码:ssl_error_rx_record_too_long。这通常意味着在服务器上实现 SSL 不正确。该错误通常是由服务器端问题引起的,服务器管理员需要对此进行调查。

讨论此问题的另一页

火狐浏览器:

enter image description here

enter image description here

IE浏览器

enter image description here

评论

2赞 Uwe Keim 1/1/2019
对我来说看起来不像是答案。
0赞 Crick3t 1/1/2019
使用浏览器转到页面并检查它。这似乎是一个错误的SSL证书。
1赞 Crick3t 1/1/2019
@UweKeim我已经编辑了我的答案,添加了 Firefox、Chrome 和 IE 屏幕热点,显示由于服务器端 SSL 错误而无法加载页面。问题指出代码工作正常。可能最近服务器上有SSL证书更新,这与c#无关,应该在网站的服务器端修复。
0赞 Reza Akraminejad 1/1/2019
@Crick3t 我已经用这个链接检查了证书:sslshopper.com/ssl-checker.html#hostname=https://... 有什么问题有人能理解吗?
0赞 Crick3t 1/1/2019
@Hamed_gibago你可以试试这个网站,它显示了更多细节:链接
6赞 Steffen Ullrich 1/1/2019 #2

服务器坏了。尝试显示 TLS 握手已成功完成,证书正常,但它稍后在通信中断:openssl s_client

$ openssl s_client -connect www.sayehrooshan-co.com:443 -servername www.sayehrooshan-co.com -crlf
CONNECTED(00000003)
...
SSL-Session:
    Protocol  : TLSv1
    Cipher    : ECDHE-RSA-AES256-SHA
    ...
    Verify return code: 0 (ok)
---
GET / HTTP/1.1
Host: www.sayehrooshan-co.com

140040623380160:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:s3_pkt.c:365:

在实验期间进行数据包捕获,可以看到服务器在 TLS 连接上发送纯文本:

> various TLS encrypted stuff from client (likely HTTP request) ....
< followed by sudden plain text from the server:
   Cannot find table 0.

   at System.Data.DataTableCollection.get_Item(Int32 index)
   at MyWebServerNamespace.MyWebServer.SetTableRowValue(DataSet& ds, String type, String name, String value) in D:\iteration source - table 13 removed\MyWebServer\MyWebServer.cs:line 4024
   at MyWebServerNamespace.MyWebServer.LoadCmsValues(Content cms, Ssl sslClass, DataSet& Ds, DataTable& fileDt, Socket& mySocket, Byte[]& contentBytes, Boolean& showCmsError) in D:\iteration source - table 13 removed\MyWebServer\MyWebServer.cs:line 1761
   at MyWebServerNamespace.MyWebServer.HandleTcpRequest(Object state) in D:\iteration source - table 13 removed\MyWebServer\MyWebServer.cs:line 1027
LoadCmsValues enter

客户端将尝试将此纯文本消息解释为 TLS 记录。这意味着它将解析初始字节并提取 TLS 协议版本和有效负载长度。鉴于这完全不是 TLS 记录,这些值将是垃圾。根据客户端中 TLS 堆栈的实际实现,这将导致错误消息,例如“错误的版本号”(不支持声明的 TLS 协议版本)或“SSL_ERROR_RX_RECORD_TOO_LONG”(指定的有效负载长度不是有效负载的实际长度)或更通用的“ERR_SSL_PROTOCOL_ERROR”或类似消息。

评论

0赞 Reza Akraminejad 1/2/2019
非常感谢。分析我的代码并显示这些行,让我的眼睛闪耀着我的代码中的错误,我已经开始远程调试并找到错误。为我节省了很多时间;)
0赞 Lucky7Star C Clary 4/18/2020 #3

Grasshopper 也有同样的问题,可能是因为两个路由器和 dns 绑定安装在一个 IP 地址上,而 ssl mod 安装在另一个 IP 地址上。Apache2 状态像魅力一样启动并运行的事实告诉我这是一个安装/操作错误。明天又是新的一天。