将端口443用于Socket.IO是一个坏主意吗?

OCD*_*Dev 5 ssl https nginx node.js socket.io

根据以下帖子,一些网络只允许连接到端口80和443: 套接字IO无法在公司网络内连接

编辑:为了澄清,问题是当最终用户在公司防火墙后面使用浏览器时.我的服务器防火墙设置在我的控制之下.

我已经阅读了关于Nginx使用proxy_pass到Socket.io监听另一个端口(我已经读过它的缺点)以及使用nodejitsu/node-http-proxy反向代理将非节点流量传递给Nginx(这有其它缺点) ).我有兴趣考虑所有可能的选择.

经过多次搜索,我没有找到任何有关socket.io监听端口443的可能性的讨论,如下所示:

var io = require('socket.io').listen(443);
Run Code Online (Sandbox Code Playgroud)

客户端会像这样连接:

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

除了在该服务器上放弃使用https之外,还有其他任何缺点吗?(例如,企业网络是否阻止通过端口443进行非SSL通信?)

Kor*_*nel 2

端口 443 上的非加密流量可以工作,但如果您希望与具有偏执且不太称职的安全策略的网络兼容,您应该假设有人已经“保护”了自己免受其侵害。

无论愚蠢的防火墙如何,您都应该使用 SSL 加密的 WebSocket,因为 WebSocket 协议与 HTTP 不兼容(它是伪装的,但这还不够)并且无法与 HTTP 代理可靠地工作。

例如,O2 UK(可能还有许多其他移动 ISP)通过其代理管道所有非加密连接,以重新压缩图像和审查网站。他们的代理破坏了 WebSocket 连接,唯一的解决方法是使用 SSL(除非您对 Socket.IO 回退到 jsonp 轮询感到满意......)