是否可以在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或其他帐户时,一切正常。
这真的是服务器证书错误还是别的?
由于
答案 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也有错误。