本地生成SSL证书,NodeJS同时支持http和https连接
发布于 3 年前 作者 gocpplua 3190 次浏览 来自 分享

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 感谢,还是比较详细的

回到顶部