Tom*_*ski 5 ssl server-to-server node.js socket.io
我正在尝试使用socket.io通过ssl连接设置服务器到服务器链接.这是我的例子:
/**
* 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(){});
});
Run Code Online (Sandbox Code Playgroud)
在没有SSL的情况下运行时代码工作正常.我怀疑这可能是我的自签名证书未被接受,但我不知道如何让客户接受它.
请告诉我如何:1.接受自签名SSL证书.或者2.帮助我以其他方式完成这项工作.
提前致谢.
ste*_*evo 15
我不得不在客户端做一些不同的事情来让它工作,通过手动告诉socket.io也使用该代理(并secure: true暗示https:).这里是:
// 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'); });
Run Code Online (Sandbox Code Playgroud)
这是使用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'); });
Run Code Online (Sandbox Code Playgroud)
经过一些搜索后,在客户端添加它可以使它工作:
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(){});
});
Run Code Online (Sandbox Code Playgroud)
之前的答案并不适合我.require('https').globalAgent永远undefined.
做了一些搜索并rejectUnauthorized在文档中找到了参数(https://nodejs.org/api/tls.html).不确定它是否与SocketIO有关,但它似乎与自签名证书一起使用:
var socket = io.connect('//yourhost:8000', {secure: true, rejectUnauthorized: false})
secure: true 可能是可选的,但无论如何我喜欢强制执行.
| 归档时间: |
|
| 查看次数: |
15769 次 |
| 最近记录: |