Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firefox OS TCPSocket API:SSL收到的记录超过了允许的最大长度_Javascript_Ssl_Firefox Os - Fatal编程技术网

Javascript Firefox OS TCPSocket API:SSL收到的记录超过了允许的最大长度

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

是否可以在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.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)

  • 位于
    mbp.telekom.de
    的服务器不接受SSL/TLS初始连接(与该端口上的大多数IMAP服务器一样),但接受可通过STARTTLS升级到SSL/TLS的纯文本IMAP连接(应改为在端口143上执行)。这可能是服务器配置的问题。这也解释了为什么您的连接使用
    imap.gmail.com
    (因为它确实支持在端口993上不使用STARTTLS的正常SSL/TLS连接,并且因为您的
    {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点,我会试着检查一下。