提问人:Reza Akraminejad 提问时间:1/1/2019 最后编辑:Uwe KeimReza Akraminejad 更新时间:4/18/2020 访问量:12919
在服务器端获取 SSL 错误SSL_ERROR_RX_RECORD_TOO_LONG
Get SSL error SSL_ERROR_RX_RECORD_TOO_LONG in server side
问:
我用 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#,Firefox也显示相同的错误消息。
“错误代码:ssl_error_rx_record_too_long。这通常意味着在服务器上实现 SSL 不正确。该错误通常是由服务器端问题引起的,服务器管理员需要对此进行调查。
火狐浏览器:
铬
IE浏览器
评论
服务器坏了。尝试显示 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”或类似消息。
评论
Grasshopper 也有同样的问题,可能是因为两个路由器和 dns 绑定安装在一个 IP 地址上,而 ssl mod 安装在另一个 IP 地址上。Apache2 状态像魅力一样启动并运行的事实告诉我这是一个安装/操作错误。明天又是新的一天。
评论