Node.js和Socket.io - 证书无效

时间:2017-08-21 08:35:39

标签: node.js socket.io openssl lets-encrypt

我无法将聊天应用程序连接到在Ubuntu 16.04上运行的Node.js服务器。问题似乎是使用' letsencrypt'生成的ssl证书。

我已使用openssl证书成功连接到我的Node.js服务器 - 但这仅适用于我的Chrome浏览器。

这是我的Node.js部分的代码。:

let fs = require('fs');
let https = require('https');

var options = {
     key: fs.readFileSync('./file.pem'),
     cert: fs.readFileSync('./file.crt')
};

let server = https.createServer(options);
let io = require('socket.io')(server);

let Redis = require('ioredis');
let redis = new Redis();

redis.subscribe('all-chat');

redis.on('message', function (channel, message) {
    message = JSON.parse(message);
    io.emit(channel + ':' + message.event, message.data);
});

server.listen(3201);

我从浏览器获取的错误代码是。:

net::ERR_INSECURE_RESPONSE

我的猜测是,由于某些奇怪的原因,我获得的证书不符合某种标准,因此浏览器会放弃响应。

我可以在网上收集有关此问题的内容 - 解决方案应该是使用来自' letsencrypt'和/或。的多种变体:

var options = { ... };

而且我相信我已经尝试了所有可能的组合。

如果我在两个窗口中打开我的网站,一个在Edge中,一个在Chrome中,我可以成功地将消息从Edge发送到Chrome - 但消息将不会在Edge中显示。

提前感谢任何可能让我重回正轨的细节!

1 个答案:

答案 0 :(得分:0)

答案很简单。为确保您可以使用证书,您可以使用https://www.digicert.com/help/上的诊断工具。

对于从客户端到我的Node.js端的连接,我在客户端声明了IP - 当使用已经使用公共域创建的证书时,这是不可行的。所以我将客户端的IP从IP更改为公共域,并且它有效!