应用 - SSL
使用SSL时,尽量用域名的形式连接(ws 可能会验证域名)。更多,请参考 node.js 关于 ssl 的信息。
1、单向认证
- 客户端
const clientSession = await SocketD.createClient("sd:wss://localhost:8602/?u=a&p=2")
.open();
- 服务端(只适用于 node.js)
const options = {
key: fs.readFileSync('/data/ssl/server.key'),
cert: fs.readFileSync('/data/ssl/server.crt'),
ca: fs.readFileSync('/data/ssl/ca.crt')
};
const httpServer = https.createServer(options, (req, res) => {
// 可选:处理普通HTTPS请求
res.writeHead(200);
res.end('Hello, this is a secure server!');
});
SocketD.createServer("sd:ws")
.config(c=>c.port(8602).fragmentSize(1024 * 1024).httpServer(httpServer).useSubprotocols(true))
.listen(buildListener())
.start();
2、双向认证
- 客户端(只适用于 node.js)
const options = {
key: fs.readFileSync('/data/ssl/server.key'),
cert: fs.readFileSync('/data/ssl/server.crt'),
ca: fs.readFileSync('/data/ssl/ca.crt')
};
const clientSession = await SocketD.createClient("sd:wss://localhost:8602/?u=a&p=2")
.config(c=>c.sslContext(options))
.open();
- 服务端(只适用于 node.js)
const options = {
key: fs.readFileSync('/data/ssl/server.key'),
cert: fs.readFileSync('/data/ssl/server.crt'),
ca: fs.readFileSync('/data/ssl/ca.crt'),
requestCert:true, //表示请求客户端证书
rejectUnauthorized:true //如果客户端没有提供有效证书(或证书不被 ca 信任),连接将被拒绝
};
const httpServer = https.createServer(options, (req, res) => {
// 可选:处理普通HTTPS请求
res.writeHead(200);
res.end('Hello, this is a secure server!');
});
SocketD.createServer("sd:ws")
.config(c=>c.port(8602).fragmentSize(1024 * 1024).httpServer(httpServer).useSubprotocols(true))
.listen(buildListener())
.start();