无论如何,NodeJS 都会抛出 `UNABLE_TO_VERIFY_LEAF_SIGNATURE`

Posted

技术标签:

【中文标题】无论如何,NodeJS 都会抛出 `UNABLE_TO_VERIFY_LEAF_SIGNATURE`【英文标题】:NodeJS keep throwing `UNABLE_TO_VERIFY_LEAF_SIGNATURE` no matter what 【发布时间】:2020-06-12 08:00:41 【问题描述】:

我有一个基本的 nodeJS 应用程序,它通过安全的 websocket(ws 库)连接连接到服务器。连接服务器时不断抛出UNABLE_TO_VERIFY_LEAF_SIGNATURE 错误。我无法控制服务器,它是外部的。端点以wss:// 开头(不确定是否有区别)

我尝试了很多东西,但似乎没有一个有效:

rejectUnauthorized: false 有效,但连接在 x 次后中断,1006 export NODE_EXTRA_CA_CERTS=[your CA certificate file path] 不起作用 npm config set cafile [your CA certificate file path] 不起作用 npm 模块 syswide-cas 或 node-ssl-root-cas 不起作用 在套接字选项中添加 ca: [fs.readFileSync("ca.ca-bundle", encoding: 'utf-8')] 不起作用

但是,当我在浏览器中导航到端点时,连接是有效且安全的。我尝试从浏览器中提取证书并包含到 nodeJS 中,没有结果,同样的错误。当我使用网站https://whatsmychaincert.com/ 获取证书时也是如此......

基本代码:

this.websocket = new WebSocket(this.apiUrl, this.applicationId, 
        rejectUnauthorized: true, 
    );

...

this.websocket.on('open', () => 
        console.log('Connection successfully opened');
    );


this.websocket.on('error', error => 
        console.log(error);
    );

无论我做什么,似乎无论包含的证书 NodeJS 一直向我抛出 UNABLE_TO_VERIFY_LEAF_SIGNATURE 错误。

有人知道发生了什么吗?

【问题讨论】:

【参考方案1】:

经过几天和几天的尝试解决这个问题,我终于设法解决了这个问题!

我一直在使用错误的证书链。我要连接的端点有一个 wss:// 前缀。但是我从带有 https:// 前缀的 url 获取证书。显然这有一个不同的证书链。

【讨论】:

以上是关于无论如何,NodeJS 都会抛出 `UNABLE_TO_VERIFY_LEAF_SIGNATURE`的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 sudo 的情况下修复 npm 抛出错误

访问 useRef 中的任何元素都会抛出“未定义”

为啥 jsonwebtoken 会抛出“无效签名”错误?

每次“Camera camera = Camera.open();”时,Android都会抛出错误叫做

ServiceProvider.GetService<Type> 每次使用都会抛出异常

Typescript / Eslint 在我开始的每个项目中都会抛出“无法读取文件 tsconfig.json”