无法获取SSL以使用NodeJS

时间:2013-10-13 02:21:34

标签: node.js ssl https websocket wss

我正在尝试设置安全的socket.io连接。我已经设置了一个localhost apache服务器来在443上运行https,但现在我无法让客户端socket.io在端口9650上打开安全连接。

服务器端代码简单:

this.socket = require("socket.io").listen(port);

客户端就是:

<script type="text/javascript" src="http://localhost:9650/socket.io/socket.io.js"></script>

(https在这里不起作用)

this.Socket = io.connect("https://localhost", {secure: true, port:9650});

定义了io所以我可以调用connect但是当我尝试连接时出现这个错误:

GET https://localhost:9650/socket.io/1/?t=1381630341479  socket.io.js:1659

我尝试过连接上的变体,找不到可行的解决方案。一切确实有效,安全设置为假,但这不是我想要的。

这不是http节点应用程序。这是一个通用的应用程序。似乎我所喜欢的所有东西都支持http类型的服务器,我在这里不需要它。

1 个答案:

答案 0 :(得分:0)

您收到错误,因为客户端在尝试与服务器握手时无法找到HTTPS资源。要解决此问题,您需要Socket.IO来侦听HTTPS服务器的实例。

Socket.IO将在内部使用HTTP服务器,无论您是否需要。默认情况下,它是HTTP服务器,因此如果要通过TLS使用传输,则需要手动创建HTTPS服务器。

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

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

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

server.listen();