繁体   English   中英

Socket.io SSL错误

[英]Socket.io SSL error

我正在努力保护我的网站

在我最终安装SSL证书之前一切都很好(来自CloudFlare,而不是自签名证书)

所以问题是:当我通过HTTP打开我的网站时 - 一切都运行完美,但是当我通过https打开它时 - 网站失去了与主机的连接(它需要工作)

在控制台我可以看到:

socket.io-1.4.5.js:1 GET https://188.226.131.219:8080/socket.io/?EIO=3&transport=polling&t=LlI-URk net :: ERR_CONNECTION_CLOSED

如果我理解正确,这是端口的问题。 使用HTTP端口80是可以的,使用https端口443有问题。 有没有办法交换端口?

您可以尝试以下方法:

在node.js后端,将socket配置为:

var fs = require('fs');
var https = require('https');
var app = require('express')();


        var options = {
                key: fs.readFileSync('<.key location>'),
                cert: fs.readFileSync('<.cert location>')
        };
       var server = https.createServer(options, app);

server.listen(443, "0.0.0.0", function(){
        console.log('listening in port', 443);
});

在客户端应用程序中,您需要连接为:

 socket = io.connect(<server_ip>, {
            secure: true
        });

好像你的前端是http://188.226.131.219和你有一个WebSocket的服务http://188.226.131.219:8080

您已将前端配置为使用SSL证书,并且可以在https://188.226.131.219上访问,但是WebSocket服务的链接可能取决于用于加载前端的协议和主机,因此如果从https:/ /188.226.131.219 ,然后你的前端的JS将尝试连接到https://188.226.131.219:8080 ,但你的WebSocket服务会在那里监听HTTP请求,而不是HTTPS请求。

首先,您需要设置WebSocket服务以使用SSL证书,但是在不同的端口(例如8443)上,您将不得不修改您的前端,以便能够低估它的加载方式(使用HTTP或HTTPS) )并找出WebSocket服务的正确端口。

我只是想把它扔出去。 这导致了我一个类似的错误,可能是你正在寻找的。

socket.io示例说使用ip地址将客户端脚本连接到服务器。 像这样的东西:

var socket = io.connect("https://123.45.6.78:443"); 

但是,一旦为SSL证书添加“A”记录,就需要使用“A”记录的主机名,而不是它所指向的IP地址。 像这样:

var socket = io.connect("www.mysite.com"); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM