在node.js中使用socket.io设置服务器 – 服务器SSL通信

我试图通过ssl连接使用socket.iobuild立服务器到服务器的链接。 这是我的例子:

/** * Server */ var app = require('express')(); var config = require('./config'); var https = require('https'); var http = require('http'); var fs = require('fs'); var server = https.createServer({key: fs.readFileSync(config.ssl.key), cert: fs.readFileSync(config.ssl.cert), passphrase: config.ssl.passphrase}, app); //var server = http.createServer(app); var io = require('socket.io').listen(server); server.listen(config.port); app.get('/', function (req, res) { res.send('Server'); //res.sendfile(__dirname + '/index.html'); }); io.sockets.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); }); /** * Client */ var io = require('socket.io-client'); //var socket = io.connect('http://localhost', {port: 8088}); var socket = io.connect('https://localhost', {secure: true, port: 8088}); socket.on('connect', function(){ socket.on('event', function(data){}); socket.on('disconnect', function(){}); }); 

没有SSL的情况下运行的代码工作正常。 我怀疑这可能是我的自签名证书不被接受,但我不知道如何让客户接受它。

请告诉我如何:1.接受自签名的SSL证书。 或者2.帮助我以其他方式做这个工作。

提前致谢。

我不得不在客户端上做一些稍微不同的事情,通过手动告诉socket.io来使用该代理(以及secure: truehttps:隐含)。 这里是:

 // Client var io = require('socket.io-client'); var https = require('https'); https.globalAgent.options.rejectUnauthorized = false; var socket = io.connect('https://localhost:3210/', { agent: https.globalAgent }); socket.on('connect', function(){ console.log('connected'); }); 

这是使用socket.io v1.0.2。

另外,我也有以下的成功,正如在这里指出的: Socket.io + SSL +自签名CA证书给连接错误

 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; var io = require('socket.io-client'); var socket = io.connect('https://localhost:3210/'); socket.on('connect', function(){ console.log('connected'); }); 

经过一些更多的search,在客户端添加它使其工作:

require('https')。globalAgent.options.rejectUnauthorized = false;

 /** * Client */ var io = require('socket.io-client'); //var socket = io.connect('http://localhost', {port: 8088}); require('https').globalAgent.options.rejectUnauthorized = false; var socket = io.connect('https://localhost', {secure: true, port: 8088}); socket.on('connect', function(){ socket.on('event', function(data){}); socket.on('disconnect', function(){}); }); 

以前的答案没有为我做。 require('https').globalAgent始终undefined

在文档( https://nodejs.org/api/tls.html )中find了一些rejectUnauthorized参数。 不知道它是否与SocketIO有关,但它似乎与自签名证书一起工作:

var socket = io.connect('//yourhost:8000', {secure: true, rejectUnauthorized: false})

secure: true可能是可选的,但我喜欢强制执行它。

Interesting Posts