Socket.IO握手安全标记始终为假

时间:2018-03-22 16:03:34

标签: javascript node.js socket.io

我希望我的插座安全通信。我想我要通过https进行通信。那么为什么安全标志总是错误的呢?到目前为止,我尝试了一系列不同的标志设置,但没有效果。

在glitch.com上开发的示例网站:https://glitch.com/edit/#!/sponge-tablecloth

目标网页位于:https://sponge-tablecloth.glitch.me/

客户端页面代码:

<div id="div"></div>
<script src="/socket.io/socket.io.js"></script>
<script>
  socket = io("https://sponge-tablecloth.glitch.me/");
  socket.on('message', function(message) { div.innerHTML += message + "<br>"; });
</script>

Node.js服务器代码:

var express = require('express');
var app = express();
let http = require('http').Server(app);

app.use(express.static('public'));
app.get("/", function (request, response) {
  response.sendFile(__dirname + '/views/index.html');
});

let io = require('socket.io')(http);
io.on('connection', function(socket) {
  console.log("checking connection, secure: " + socket.handshake.secure);
  io.emit('message', "checking a connection, secure: " + socket.handshake.secure);
});

let listener = http.listen(process.env.PORT, function(){
  console.log('Your app is listening on port ' + listener.address().port);
});

1 个答案:

答案 0 :(得分:3)

在将请求代理到您的应用程序之前,问题很可能是反向代理正在终止TLS。通常有一个如下所示的设置:

User -[HTTPS]-> Nginx(terminate TLS) -[HTTP]-> Application

这意味着您的应用程序认为传输始终不安全,而实际上它已被代理终止(在本例中为Nginx)。 Glitch.io可能会做这件事,因为您的应用程序只提供不安全的HTTP连接 如果您需要端到端加密,则需要使用stdlib中的https包而不是http包,并设置证书。