首先使用 OpenSSL 创建自签名证书:
- #生成私钥key文件
- openssl genrsa 1024 > /path/to/private.pem
- //
- #通过私钥文件生成CSR证书签名
- openssl req -new -key /path/to/private.pem -out csr.pem
- //
- #通过私钥文件和CSR证书签名生成证书文件
- openssl x509 -req -days 365 -in csr.pem -signkey /path/to/private.pem -out /path/to/file.crt
使用 ws 模块创建 wss 服务器:
- var https = require('https');
- var ws = require('ws');
- var fs = require('fs');
- var keypath = process.cwd() + '/server.key'; //我把秘钥文件放在运行命令的目录下测试
- var certpath = process.cwd() + '/server.crt'; //console.log(keypath);
- //console.log(certpath);
- var options = {
- key: fs.readFileSync(keypath),
- cert: fs.readFileSync(certpath),
- passphrase: '1234' //如果秘钥文件有密码的话,用这个属性设置密码
- };
- var server = https.createServer(options,
- function(req, res) { //要是单纯的https连接的话就会返回这个东西
- res.writeHead(403); //403即可
- res.end("This is a webSockets server!\n");
- }).listen(15449);
- var wss = new ws.Server({
- server: server
- }); //把创建好的https服务器丢进websocket的创建函数里,ws会用这个服务器来创建wss服务
- //同样,如果丢进去的是个http服务的话那么创建出来的还是无加密的ws服务
- wss.on('connection',
- function(wsConnect) {
- wsConnect.on('message',
- function(message) {
- console.log(message);
- });
- });
客户端链接:
- var ws = new WebSocket('wss://localhost:15449/', {
- protocolVersion: 8,
- origin: 'https://localhost:15449',
- rejectUnauthorized: false //重要,自签名证书只能这样设了。CA颁发的受信任证书就不需要了
- });
来源: http://www.jb51.net/article/114520.htm