SocketIO在使用自签名证书时会抛出net::ERR_CERT_AUTHORITY_INVALID错误。

4

我正在客户端使用Socket.IO:

const socket = require('socket.io-client')('https://localhost:4200', {secure: true, rejectUnauthorized: false})

在服务器上:

let https = require('https')
let fs = require('fs')

let options = {
    key: fs.readFileSync('cert/my.net.key'),
    cert: fs.readFileSync('cert/my.net.cert'),
    requestCert: false,
    rejectUnauthorized: false,
};

const server = https.createServer(options, require('express')())
const io = require('socket.io')(server)

所有服务都已正常启动,但在客户端上,我遇到了 polling-xhr.js:263 GET https://localhost:4200/socket.io/?EIO=3&transport=polling&t=MPa6ZuL net::ERR_CERT_AUTHORITY_INVALID 错误。

为什么?出了什么问题?


我遇到了相同的错误,但这个错误来自我的Chrome浏览器。我正在使用nodejs和express的自签名证书。我不得不在Chrome中点击“继续前进”。 - A.W.
1个回答

1
浏览器出于安全原因不喜欢自签名证书。
为了解决这个问题,我看到三种选择:
1. 使用由认证单位颁发的证书。
- 它可以是免费的,比如https://letsencrypt.org/
2. 根据开发环境动态创建服务器,不包括证书,并直接使用HTTP和WS(而不是HTTPS和WSS)。
3. 更改在开发中使用的浏览器的配置,使其接受自签名证书。
- 例如,对于Chrome,只需启用“允许从localhost加载的资源使用无效证书”的设置(chrome://flags/#allow-insecure-localhost)
但请记住,在生产环境中您将无法使用自签名证书。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接