0

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

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

谢谢

4

2 回答 2

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})。

原则上,您可以在使用该命令后实现您的 IMAP 客户端以将连接升级到 SSL/TLS STARTTLS,但您需要能够将相同的套接字升级到 SSL/TLS。我在文档中看不到任何TCPSocket允许这样做的内容(例如,与 Java 中的方式相同SSLSocketFactory.createSocket(Socket, ...))。

编辑:

快速查看TCPSocket.js源代码后,似乎确实支持,但这仅对未记录的方法starttls有意义。upgradeToSecure

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

于 2013-09-05T13:32:00.407 回答
0

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

于 2013-09-05T13:27:52.293 回答