2017-05-04 171 views
2

我想确保我的网站Socket.io SSL错误

一切顺利,直到我终于安装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有问题。有任何交换端口的方法吗?

+2

请提供有关您如何配置服务器以使用SSL证书以及您在服务器端使用哪个WebSocket库的更多信息。 – vsenko

+0

[请参阅此链接](https://stackoverflow.com/questions/7185074/heroku-nodejs-http-to-https-ssl-forced-redirect/23894573#23894573) –

回答

1

看起来您的前端位于http://188.226.131.219,您在http://188.226.131.219:8080上有WebSocket服务。

您已经配置您的前端使用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服务的正确端口。

1

你可以尝试以下方法:

在Node.js的后端,如配置插座:

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 
     }); 
1

我只是想把它扔到那里。这导致了一个类似的错误,可能是你在找什么。

socket.io示例声称使用ip地址将客户端脚本连接到服务器。事情是这样的:

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

然而,一旦你添加一个“A”记录你的SSL证书,则需要使用“A”记录,而不是IP地址被引导到的主机名。像这样:

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