Мы пытаемся заставить Socket.io flashsockets работать в Internet Explorer 9 через HTTPS / WSS. Флэш-сокеты работают через HTTP, но HTTPS создает нам проблемы. Мы используем socket.io версии 0.8.7 и socket.io-client версии 0.9.1-1.
Мы запускаем наш сервер websocket через SSL на порт 443. Мы указали местоположение нашего файла WebsocketMainInsecure.swf (это междоменные запросы ws) в правильном месте, и мы загружаем файл во встраиваемый swfobject. через HTTPS.
Мы открыли порт 843 в нашей группе безопасности для нашего экземпляра EC2, и файл политики перекрестного происхождения успешно обрабатывается через HTTP. Кажется, что он не отображается через HTTPS (Chrome выдает ошибку SSL-соединения).
Мы пробовали две версии файла WebsocketMainInsecure.swf. Первый - это файл, предоставленный Socket.io, который построен на основе WebsocketMainInsecure.as и не включает строку
Security.allowInsecureDomain("*");
Это вызывает ошибку SCRIPT16389: Unspecified error.
на WebSocket.__flash.setCallerUrl(location.href)
линия.
Мы решили, что это произошло из-за того, что SWF-файл не разрешал HTTPS-запросы, поэтому мы заменили файл WebSocketMainInsecure.swf тем, который был найден в этом репозитории: https://github.com/gimite/web-socket-js потому что он включает
Security.allowInsecureDomain("*");
в коде ActionScript. Когда мы использовали это, мы увидели, что соединение flashsocket продолжало отключаться и повторно подключаться в бесконечном цикле. Мы отследили ошибку до файла transport.js в библиотеке socket.io в функции onSocketError прототипа транспорта. Выдает ошибку:
[Error: 139662382290912:error:1408F092:SSL routines:SSL3_GET_RECORD:data length too long:s3_pkt.c:503:]
Мы предполагаем, что эта ошибка может быть каким-то образом связана с нашими сертификатами поддоменов ssl с подстановочными знаками, но мы не уверены.
Мы даже пытались обновить и socket.io, и socket.io-client до версии 0.9.6, но по-прежнему получали ошибку «Доступ запрещен».
Эту ошибку было очень трудно отладить, и теперь мы не знаем, как заставить работать flashsockets. Нам интересно, может ли это быть связано с использованием более старой версии socket.io, или, может быть, наш файловый сервер политики не принимает запросы HTTPS, или, может быть, даже способ, которым файл WebSocketMainInsecure.swf из Интернета- Репозиторий socket-js на github был построен в соответствии с ожиданиями socket.io-client.
Любая помощь приветствуется!
Похоже, что он прошел мимо элементов управления XSS, и, предположительно, ошибка SSL выглядит так, как будто ваш клиент websocket не подключается к веб-узлу SSL.
Проверьте свой веб-сокет SSL, используя: openssl s_client -connect servername:websocketport
Вы должны увидеть дамп сертификатов SSL и указать, доверено ли оно. Вы также можете запустить запрос, если знаете, как реплицировать свой клиент websocket.
Кроме того, используйте Wireshark / Tcpdump, чтобы проверить, какие порты открываются. Дамп из раздела «Сеть» и консоли из инструмента разработчика Chrome может оказаться полезным.