Firefox OS TCPSocket API: SSL получил запись, длина которой превышает максимально допустимую

Можно ли отключить проверку SSL-сертификата в ОС Firefox? У меня есть предварительный просмотр Geeksphone dev, и я пытаюсь создать клиент IMAP через TCPSocket API, но сертификат сервера почему-то недействителен. Я получил эту ошибку:

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 или другой учетной записи, все работает нормально.

Это действительно ошибка сертификата сервера или что-то еще?

Спасибо


person user1677674    schedule 05.09.2013    source источник
comment
@JanKundrát, не уверен, соответствует ли это тегу imap, но на самом деле это связано с IMAP: два разных способа должен использовать SSL/TLS.   -  person Bruno    schedule 05.09.2013


Ответы (2)


Отключение проверки сертификата, как правило, плохая идея и вряд ли поможет. Ошибка говорит ssl_error_rx_record_too_long, и слишком длинная запись просто слишком длинна, независимо от того, решите ли вы принять какой-либо сертификат или нет. Этот тип ошибки, как правило, вызывается записью, которая «слишком длинна для SSL/TLS», то есть некоторым сообщением, которое вообще не является действительным SSL/TLS.

Здесь есть несколько других проблем.

  • Согласно документации, TCPSocket принимает логическое значение для параметра useSSL , а не строка. Было бы справедливо предположить, что где-то в коде есть if (useSSL) {...}, поэтому 'starttls' в вашей конфигурации считается как true.

  • Порт 993, как правило, можно использовать для IMAP через SSL (после первоначального подключения через SSL), а не для IMAP+STARTTLS через порт 143 (где тот же сокет обновляется до SSL/TLS после первоначального текстового подключения).

  • Сервер в mbp.telekom.de не принимает начальные соединения SSL/TLS (как большинство серверов IMAP на этом порту), но принимает соединения IMAP с обычным текстом, которые можно обновить до SSL/TLS через STARTTLS (вместо этого он должен делать на порту 143). Вероятно, это проблема с конфигурацией сервера. Это также объясняет, почему ваше соединение работает с imap.gmail.com (поскольку оно поддерживает обычное соединение SSL/TLS, которое не использует STARTTLS на порту 993, и поскольку ваше {useSSL:'starttls'} на самом деле означает {useSSL:true}).

В принципе, вы можете реализовать свой IMAP-клиент для обновления соединения до SSL/TLS после использования команды STARTTLS, но вам нужно будет иметь возможность обновить тот же сокет до SSL/TLS. Я не вижу в документации TCPSocket ничего, что позволило бы это сделать (так же, как SSLSocketFactory.createSocket(Socket, ...) делает в Java).

ИЗМЕНИТЬ:

После беглого просмотра TCPSocket.js исходный код, кажется, что он действительно поддерживает starttls, но это имеет смысл только с недокументированным методом upgradeToSecure.

Возможно, вы сможете реализовать IMAP+STARTTLS следующим образом: инициируйте обычное соединение IMAP, а затем выполните обновление до SSL/TLS с помощью команды STARTTLS, как описано в RFC 2595. Обычно это делается на порту 143, но так как ваш сервер настроен (довольно неправильно) для этого на порт 993, то и там должно работать.

person Bruno    schedule 05.09.2013
comment
Привет Бруно. useSSL : 'starttls' допустим в соответствии с исходным кодом, он автоматически преобразует его в true/false (я проверял). Я также не нашел в API способа обновить сокет. Но за пункты 2 и 3 спасибо, попробую проверить. - person user1677674; 06.09.2013

Это не ошибка сертификата, это ошибка протокола SSL. SSL упаковывает данные в «фреймы» или «записи». (почти пакеты, но на уровне SSL, а не на уровне сокета). Для этих кадров существует максимальная длина (кажется, 16 КБ), и сервер отправил кадр длиннее этого. Я не могу сказать вам, почему: но, возможно, их сертификат слишком велик, а в их SSL-библиотеке есть ошибки.

person Max    schedule 05.09.2013