本地生成SSL证书,NodeJS同时支持http和https连接
socketio:2.3.0 node:14.16.1
1、生成证书
openssl genrsa -des3 -out server.pass.key 2048
openssl rsa -in server.pass.key -out server.key
openssl req -new -key server.key -out server.csr -subj “/C=CN/ST=HangZhou/L=XIAOSHAN/O=localhost/OU=localhost/CN=localshot”
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt #生成证书
2、Coding
const port = 3000
const sport = 3001
const option = {
“key”: fs.readFileSync(’./ts_output/pem/server.key’, ‘utf8’),
“cert”: fs.readFileSync(’./ts_output/pem/server.crt’, ‘utf8’)
};
var httpServer = require(‘http’).createServer();
var httpsServer = require(‘https’).createServer(option);
var sio = require(‘socket.io’)(httpServer);
var ssio = require(‘socket.io’)(httpsServer);
sio.on(‘connection’, function(client){
console.log(’-----------no ssl-----------------’)
});
});
ssio.on(‘connection’, function(client){
console.log(’-----------ssl-----------------’)
});
});
httpServer.listen(port);
httpsServer.listen(sport)
console.log(‘sio Server listening at port %d’, port);
console.log(‘ssio Server listening at port %d’, sport);
// Uncaught exception handler
process.on(‘uncaughtException’, function(err) {
console.error(’ Caught exception: ’ + err.stack);
});
3、通过socketio client 访问:socketio 2.x
因为https需要对浏览器添加信任,所以操作前请现在浏览器输入: http://127.0.0.1:3001
8 回复
@zengming00 这个我可以认为是使用脚本,自动添加了信任吧?
@i5ting 感谢!! letsencrypt这个我看过,可以免费生成证书,网页操作还方便。 acme.sh支持这个多功能,真是一个利器,哈哈。 当前我目前还是在本地玩玩的,暂时还用不到。
如果是在线上使用 HTTPS,可以试试 certbot https://certbot.eff.org/ 让它自动配置 Nginx 和定期刷新证书(避免过期),然后 Nginx 将 HTTP 和 HTTPS 请求反向代理到 Node.js 应用,Node.js 应用只需要提供 HTTP 即可。
@leizongmin 感谢! 去了解了下,发现这个方案很棒。
@daGaiGuanYu 感谢,还是比较详细的