我已经用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);
搜索了很多但没有任何解决方案 有人知道吗?
答案 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的实现不正确。该错误通常是由服务器管理员需要调查的服务器端问题引起的。”
Another page discussing this issue
Firefox:
Chrome
IE
答案 2 :(得分:0)
Grasshopper可能存在相同的问题,可能是因为两个路由器和dns绑定安装在一个IP地址上,而ssl mod则安装在另一个IP地址上。 Apache2状态像启动符一样正常运行,这告诉我这是安装/操作错误。明天是另一天。