【问题标题】:Error when connecting to a secure Socket.io connection using self signed certificate from a browser app使用来自浏览器应用程序的自签名证书连接到安全 Socket.io 连接时出错
【发布时间】:2020-07-01 21:05:05
【问题描述】:

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';

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

【问题讨论】:

    标签: ssl browser socket.io self-signed-certificate


    【解决方案1】:

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

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

    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});
    

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

    // browser client
    const io = require("socket.io-client");
    const socket = io({rejectUnauthorized: false});
    

    【讨论】:

      猜你喜欢
      • 2014-04-30
      • 2013-02-28
      • 2017-12-18
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多