0

Socket.io 客户端 API 文档建议客户端应将连接请求中的自签名证书传递给服务器:

// client-side
const socket = io({ca: fs.readFileSync('server-cert.pem'),rejectUnauthorized: false});

这在节点环境中效果很好。

如何在浏览器 javascript 应用程序中进行这项工作?我面临两个问题:

  1. 如何在浏览器应用程序中包含证书文件?readfileSync 找不到文件
  2. 如果我只在选项中包含rejectUnauthorized:false,它适用于节点,但在浏览器(Firefox,Chrome)中仍然不起作用

我已经尝试了一切,如下所示,但没有任何效果

https.globalAgent.options.rejectUnauthorized = false;
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

我是获得正确签名证书的唯一选择吗?

4

1 回答 1

0

不确定到底发生了什么,但它现在可以在 Chrome 上运行。总而言之,这就是我必须做的:

创建自签名证书并信任它们使用这些证书运行基于节点的 socket.io 服务器(下面的代码片段)。确保您的证书适用于指定的“网址”

const Io = require("socket.io");
const httpsServer = https.createServer(myCerts, expressApp);
httpsServer.listen(port, 'url', () => console.log(`listening on HTTPS port ${port}!`));
const io= new Io(httpsServer);

在节点客户端中,我可以将证书与连接请求一起传递

// node client
const io = require("socket.io-client");
const socket = io({ca: fs.readFileSync('server-cert.pem'),rejectUnauthorized: false});

在浏览器客户端,只需要在options中指定rejectUnauthorized: false

// browser client
const io = require("socket.io-client");
const socket = io({rejectUnauthorized: false});
于 2020-07-02T13:42:13.897 回答