2016-09-09 2 views
0

Итак, я являюсь абсолютным новичком в Socket.IO, но у меня есть предварительно построенное приложение, которое необходимо защитить двумя способами: оно должно передаваться через HTTPS и он должен быть ограничен только данными сервера для определенного домена.Защита веб-узла Socket.IO и ограничение его на домен

Это код эмитента до сих пор: https://github.com/Bitzz/Pokemon-Go-Coords/blob/master/discord-bot/index.js Как я могу его обеспечить? Я полагаю, что-то вдоль линий

io.set('origins', 'https://example.com:*'); 

на линии 156 будет ограничивать его в одной области ... Могу ли я, может быть черный список только определенные домены вместо этого? Помимо этого, как мне заставить его излучать через https через wss?

В настоящее время консоль показывает: bye bye ws over https

Я думаю, что я могу понять, как настроить веб-сторонний читателя искать более HTTPS WebSocket, но заставить его отправить не то, что я знаю, как выяснить, , Пожалуйста, используйте простые слова. Я не умный cookie. :(

ответ

0

Я нашел решение.

В файле конфигурации apache2 сайта для безопасной конфигурации (*: 443), добавьте следующее:

#This enables polling over https. Painfully inefficient but a good fallback 
SSLProxyEngine on 
ProxyPass /socket.io http://127.0.0.1:49002/socket.io/ 
ProxyPassReverse /socket.io http://127.0.0.1:49002/socket.io/ 

#This upgrades and rewrites the ws to wss 
RewriteEngine on 
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC] 
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC] 
RewriteRule .* ws://localhost:49002%{REQUEST_URI} [P] 
2

Чтобы ограничить Socket.io многократным домена, я считаю, нужно только, чтобы отделить каждую область одним пробелом.

io.set('origins', 'https://example.com:* https://anotherdomain.com:*');

О связи SSL, существует несколько способов для архивации что:

  1. Config Socket.IO использовать SSL (WSS: // вместо WS: //) в NodeJS, есть ответ здесь: node.js, socket.io with SSL
  2. Создать обратный прокси-сервер с Nginx, есть руководство здесь: https://www.exratione.com/2013/06/websockets-over-ssl-with-nodejs-and-nginx/
  3. Использование обратного прокси-сервера с 3-го сервиса как https://www.cloudflare.com

третий вариант является простой способ в архив. Вам нужно всего лишь указать свой домен CloudFlare и настроить запись на ваш сервер ws, CloudFlare бесплатно предоставит ssl для websocket и автоматически сделает SSL-окончание на ваш исходный сервер websocket.

+0

Эй, спасибо за ответ. Для 2) Есть ли способ apache2 сделать это? Я пытался сделать обратный прокси с apache2, но не повезло. Я попробую третий вариант, когда я свяжусь с владельцем домена, поскольку у меня нет доступа к изменению записей DNS в это время. – Bitz

+0

@Bitz здесь вы идете http://stackoverflow.com/questions/27526281/websockets-and-apache-proxy-how-to-configure-mod-proxy-wstunnel –

+0

Спасибо за помощь, мне удалось получить опрос http запросы перенаправляются на прокси-сервер https, используя: 'SSLProxyEngine на ProxyPass /socket.io http://127.0.0.1:49002/socket.io/ ProxyPassReverse /socket.io http://127.0.0.1:49002/socket.io/' У меня все еще есть проблема с тем, что wss бросает« не удалось: ошибка во время рукопожатия WebSocket: неожиданный код ответа: 400 ». (И, как мы знаем, запросы опроса являются тяжелыми и неэффективными.) – Bitz