Chrome,NodeJS和HTTPS

时间:2016-05-13 07:32:22

标签: node.js google-chrome socket.io

这是我的服务器端:

var fs = require('fs');

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

var app = require('express')();
var http = require('https').Server(options, app);
var io = require('socket.io')(http);
var port = 1234;

app.get('/', function(req, res){
  res.sendFile(__dirname + '/../subdomains/labs/socketio.html');
});

io.on('connection', function(socket){
  socket.on('chat message', function(msg){
    io.emit('chat message', msg);
  });
});

http.listen(port, function(){
    console.log("\n\n--------------------------------");
    console.log('Currently Listening on port %d',port);
    console.log("--------------------------------\n\n");
});

我的客户方:

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>
    var socket = io('https://labs.domain.com:1234');
    $('form').submit(function(){
        socket.emit('chat message', $('#chat-message').val());
        $('#chat-message').val('');
        return false;
    });
    socket.on('chat message', function(msg){
        $('#messages').append($('<li>').text(msg));
    });
</script>

所有在Internet Explorer中工作正常(唉!)但是当它在chrome中使用它时会死掉:

GET https://labs.domain.com:1234/socket.io/?EIO=3&transport=polling&t=1463123926844-3 net::ERR_INSECURE_RESPONSE

如果我删除它的HTTPS方面,它在两种浏览器中都可以正常工作。

这很令人沮丧,因为它似乎只是Chrome的一个问题,这是我最常用的浏览器。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

如果证书存在任何问题,我的Chrome浏览器不允许安全的websocket连接。通过使用通过LetsEncrypt获得的证书,我能够在这里使用我们的应用程序获得socket.io。我并不是说这是唯一的方法,但这是我们(工作)配置的设置方式:

1 - 我和我的队友都有动态DNS设置指向我们的每台开发机器(例如:mac.example.com)

2 - 我们每个人都为我们的域设置了证书(例如mac.example.com),从LetsEncrypt获得;这样做的原因是Chrome在设置WebSockets时对您使用的证书非常挑剔,而且(目前)开发人员或最终用户无法覆盖和接受不太安全/自签名的证书。 / p>

3 - 我们在node.js应用程序中配置socket.io的代码如下:

const server = https.createServer(/* ssl options: cert etc. */, myExpressApp)
const io = require('socket.io')(server)

我们正在使用socket.io v1.4.6

听起来你问题的问题是你的服务器上已经设置了证书,但Chrome仍然会抱怨它们。这可能是罪魁祸首,听起来你可能没有sysadmin特权来改变它?

TL; DR 请勿使用Chrome认为可能认为的自签名证书或证书&#34;较少&#34;安全