Это плохая идея использовать порт 443 для Socket.IO? - PullRequest
5 голосов
/ 22 ноября 2011

Согласно следующему сообщению, некоторые сети допускают подключение только к портам 80 и 443: Socket IO не может подключиться в корпоративных сетях

Редактировать: Для пояснения,проблема заключается в том, когда конечный пользователь использует браузер на работе за корпоративным брандмауэром.Мой серверный брандмауэр находится под моим контролем.

Я читал о Nginx, используя proxy_pass для Socket.io, прослушивая другой порт (который я читал о недостатках), а также реверсивный прокси с помощью nodejitsu /node-http-proxy для передачи неузлового трафика в Nginx (что имеет другие недостатки).Я заинтересован в рассмотрении всех возможных вариантов.

После долгих поисков я не нашел никаких обсуждений о возможности socket.io прослушивания порта 443, например:

var io = require('socket.io').listen(443);

Гдеклиент будет подключаться так:

var socket = io.connect('http://url:443/', {secure: false, port: '443'});

Помимо потери использования https на этом сервере, есть ли другие недостатки?(Например, корпоративные сети блокируют не-SSL связь через порт 443?)

Ответы [ 3 ]

3 голосов
/ 22 ноября 2011

Незашифрованный трафик через порт 443 может работать, но если вы хотите совместимости с сетями с параноидальными и не вполне компетентными политиками безопасности, вам следует предположить, что кто-то «защитил» себя от него.

Независимо от того,из глупых брандмауэров вы должны использовать WebSockets с шифрованием SSL, потому что протокол WebSocket не совместим с HTTP (он маскируется как таковой, но этого недостаточно) и не будет надежно работать с HTTP прокси.

Например, O2 UK (и, вероятно, многие другие мобильные интернет-провайдеры) передает все незашифрованные соединения через прокси-сервер для повторного сжатия изображений и веб-сайтов с цензурой.Их прокси-сервер разрывает соединения WebSocket, и единственный обходной путь для него - использовать SSL (если вы не довольны Socket.IO, возвращающимся к опросу jsonp ...)

2 голосов
/ 22 ноября 2011

Это действительно зависит от того, какой тип брандмауэра настроен. Если порты просто заблокированы, то почти все может работать на портах 80 и 443. Я сам использовал это для получения сеанса SSH на моем домашнем компьютере через порт 80, когда на работе застрял за межсетевым экраном.

Однако есть несколько брандмауэров, которые имеют более продвинутые параметры фильтрации. Они могут фильтровать трафик на основе протоколов в дополнение к обычной фильтрации портов. Я даже столкнулся с одним брандмауэром перед сервером, который каким-то образом останавливал бы трафик https через ssh-туннель. Эти передовые методы фильтрации пока что являются редким исключением, поэтому в большинстве случаев вам будет достаточно просто прослушать 443.

1 голос
/ 22 ноября 2011

Я думаю, вам следует прочитать всю статью в вики о Socket.IO и заблокированных портах (антивирусами, брандмауэрами и т. Д.):

https://github.com/LearnBoost/socket.io/wiki/Socket.IO-and-firewall-software

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...