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

时间:2013-09-05 11:35:53

标签: javascript ssl firefox-os

是否可以在Firefox OS中关闭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或其他帐户时,一切正常。

这真的是服务器证书错误还是别的?

由于

2 个答案:

答案 0 :(得分:1)

关闭证书验证通常是一个坏主意,并且不太可能有所帮助。错误显示ssl_error_rx_record_too_long,并且记录太长太长,无论您是否选择接受任何证书。这种类型的错误往往是由“SSL / TLS太长”的记录引起的,也就是说某些消息根本不是有效的SSL / TLS。

这里还有一些其他问题。

  • 根据文档,TCPSocket为其useSSL参数采用布尔值,而不是字符串。假设在代码中的某个地方有一个if (useSSL) {...}似乎是公平的,因此配置中的'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文档中看不到任何允许这样做的内容(例如,与SSLSocketFactory.createSocket(Socket, ...)中的Java相同)。

编辑:

快速查看TCPSocket.js源代码后,它似乎确实支持starttls,但这只适用于未记录的upgradeToSecure方法。

您可以通过以下方式实现IMAP + STARTTLS:启动纯IMAP连接,然后使用STARTTLS命令升级到SSL / TLS,如RFC 2595中所述。这通常在端口143上完成,但由于您的服务器(相当不正确)在端口993上为此配置,它也应该在那里工作。

答案 1 :(得分:0)

这不是证书错误,这是SSL协议错误。 SSL将数据打包成“帧”或“记录”。 (几乎是数据包,但是在SSL级别而不是套接字级别)。这些帧的最大长度(16kb,我相信),服务器发送的帧长于此帧。我无法告诉你原因:但是他们的证书太大了,他们的SSL lib也有错误。