Socket.D v2.5.20

应用 - SSL

</> markdown

使用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();