【问题标题】:Firefox OS TCPSocket API : SSL received a record that exceeded the maximum permissible lengthFirefox OS TCPSocket API:SSL 接收到超过最大允许长度的记录
【发布时间】:2013-09-09 05:23:33
【问题描述】:

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

这真的是服务器证书错误还是其他原因?

谢谢

【问题讨论】:

  • @JanKundrát,不确定这是否适合 imap 标记,但这实际上与 IMAP 相关:它必须使用 SSL/TLS 的两种不同方式。

标签: javascript ssl firefox-os


【解决方案1】:

这不是证书错误,而是 SSL 协议错误。 SSL 将数据打包成“帧”或“记录”。 (相当多的数据包,但在 SSL 级别而不是套接字级别)。这些帧有一个最大长度(我相信是 16kb),并且服务器发送的帧长于该长度。我不能告诉你为什么:但也许他们的证书太大了,他们的 SSL 库有错误。

【讨论】:

    【解决方案2】:

    关闭证书验证通常是个坏主意,而且不太可能有帮助。错误为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 上为此配置,它也应该在那里工作。

    【讨论】:

    • 嗨布鲁诺。 useSSL :根据源代码,“starttls”是可以接受的,它会自动将其转换为真/假(我检查过)。我也没有在 API 中找到任何升级套接字的方法。但是感谢第 2 点和第 3 点,我会尝试检查它。
    猜你喜欢
    • 2012-04-07
    • 2012-02-01
    • 2011-02-02
    • 2012-12-20
    • 1970-01-01
    • 2016-07-04
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多