Javascript Firefox OS TCPSocket API:SSL收到的记录超过了允许的最大长度
是否可以在Firefox操作系统中关闭SSL证书验证?我有Geeksphone开发预览,并试图通过TCPSocket API创建IMAP客户端,但服务器证书不知何故无效。我得到了这个错误:Javascript Firefox OS TCPSocket API:SSL收到的记录超过了允许的最大长度,javascript,ssl,firefox-os,Javascript,Ssl,Firefox Os,是否可以在Firefox操作系统中关闭SSL证书验证?我有Geeksphone开发预览,并试图通过TCPSocket API创建IMAP客户端,但服务器证书不知何故无效。我得到了这个错误: SSL received a record that exceeded the maximum permissible length. (Error Code: ssl_error_rx_record_too_long) 我的TCPSocket初始化如下 var TCPSocket = navigator
SSL received a record that exceeded the maximum permissible length.
(Error Code: ssl_error_rx_record_too_long)
我的TCPSocket初始化如下
var TCPSocket = navigator.mozTCPSocket.open(
"mbp.telekom.de",
993,
{useSSL:'starttls'}
);
当我尝试连接到GMail或其他帐户时,一切正常
这真的是服务器证书错误还是其他原因
谢谢,这不是证书错误,这是SSL协议错误。SSL将数据打包到“帧”或“记录”中。(基本上是数据包,但在SSL级别,而不是套接字级别)。这些帧有一个最大长度(我相信是16kb),服务器发送的帧比这个长度长。我无法告诉您原因:但可能他们的证书太大,而且他们的SSL库有漏洞。关闭证书验证通常是一个坏主意,不太可能有帮助。错误显示为
ssl\u error\u rx\u record\u too\u long
,过长的记录就是过长,无论您是否选择接受任何证书。这种类型的错误往往是由“对于SSL/TLS来说太长”的记录引起的,也就是说,某些消息根本不是有效的SSL/TLS
这里还有一些其他问题
- 根据文档,其
参数采用布尔值,而不是字符串。假设代码中的某个地方有一个usesl
,那么配置中的if(usesssl){…}
将被视为'starttls'
true
- 端口993通常可用于SSL上的IMAP(通过SSL进行初始连接后),而不是端口143上的IMAP+STARTTLS(在初始纯文本连接后,相同的套接字升级为SSL/TLS)
- 位于
的服务器不接受SSL/TLS初始连接(与该端口上的大多数IMAP服务器一样),但接受可通过STARTTLS升级到SSL/TLS的纯文本IMAP连接(应改为在端口143上执行)。这可能是服务器配置的问题。这也解释了为什么您的连接使用mbp.telekom.de
(因为它确实支持在端口993上不使用STARTTLS的正常SSL/TLS连接,并且因为您的imap.gmail.com
实际上意味着{useSSL:'STARTTLS'}
){useSSL:true}
STARTTLS
命令后实现IMAP客户端以升级到SSL/TLS的连接,但您需要能够将同一套接字升级到SSL/TLS。我在TCPSocket
文档中看不到任何允许这样做的内容(例如,与Java中的方式相同)
编辑:
在快速查看源代码之后,它似乎确实支持starttls
,但这仅适用于未记录的upgradeToSecure
方法
您可以通过以下方式实现IMAP+STARTTLS:启动普通IMAP连接,然后使用
STARTTLS
命令升级到SSL/TLS,如中所述。这通常在端口143上完成,但由于您的服务器在端口993上对此进行了(相当不正确)配置,它也应该在那里工作。@JanKundrát,不确定这是否符合标记,但这实际上与IMAP有关:它必须使用SSL/TLS.Hi Bruno的两种不同方式。useSSL:'starttls'是可接受的,根据源代码,它会自动将其转换为true/false(我检查了它)。我也没有在API中找到任何方法来升级套接字。但是谢谢你的第2点和第3点,我会试着检查一下。