在服务器端获取SSL错误SSL_ERROR_RX_RECORD_TOO_LONG

时间:2019-01-01 12:03:22

标签: c# ssl ssl-certificate

我已经用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);

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

3 个答案:

答案 0 :(得分:3)

服务器已损坏。尝试使用openssl s_client可以证明TLS握手已成功完成并且证书很好,但是稍后在通信中会中断:

$ 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” < / em>(指定的有效负载长度不是有效负载的实际长度)或更通用的“ ERR_SSL_PROTOCOL_ERROR” 或类似的内容。

答案 1 :(得分:1)

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

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

Source

Another page discussing this issue

Firefox:

enter image description here

Chrome

enter image description here

IE

enter image description here

答案 2 :(得分:0)

Grasshopper可能存在相同的问题,可能是因为两个路由器和dns绑定安装在一个IP地址上,而ssl mod则安装在另一个IP地址上。 Apache2状态像启动符一样正常运行,这告诉我这是安装/操作错误。明天是另一天。