【问题标题】:Get SSL error SSL_ERROR_RX_RECORD_TOO_LONG in server side在服务器端获取 SSL 错误 SSL_ERROR_RX_RECORD_TOO_LONG
【发布时间】:2019-05-28 10:44:40
【问题描述】:

我已经用 C# 编写了自己的网络服务器。

而且我总是在端口 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-certificate


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      服务器坏了。尝试使用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”(指定的负载长度不是负载的实际长度)或更通用的“ERR_SSL_PROTOCOL_ERROR”或类似的。

      【讨论】:

      • 非常感谢。分析我的代码并显示那些行,让我的眼睛闪闪发光,我的代码中有问题,我已经开始远程调试并找到错误。节省了我很多时间;)
      【解决方案3】:

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

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

      Source

      Another page discussing this issue

      火狐:

      IE

      【讨论】:

      • 看起来不像是我的答案。
      • 用浏览器进入页面查看。这似乎是一个错误的 SSL 证书。
      • @UweKeim 我已经编辑了我的答案,添加了 Firefox、Chrome 和 IE 屏幕热点,显示由于服务器端 SSL 错误而无法加载页面。问题表明代码运行良好。可能服务器最近更新了SSL证书,和c#无关,应该在网站的服务器端修复。
      • @Crick3t 我已经通过此链接检查了证书:sslshopper.com/ssl-checker.html#hostname=https://… 有任何人能理解的问题吗?
      • @Hamed_gibago 你可以试试这个网站,它显示了更多细节:link
      猜你喜欢
      • 2011-02-01
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 2014-09-24
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 2019-12-31
      相关资源
      最近更新 更多