node.js - Socket.io 客户端无法验证最新的letsencrypt 证书
问题描述
我有一个在 HTTPS 上运行的网络服务器,带有一个letsencrypt 证书和一个通过 socket.io 连接到它的节点上的客户端。这已经工作了很长时间,但是在 2021 年 1 月 11 日,letencrypt 更新了证书(就像它已经成功完成了几年一样),从那时起我在 socket.io 客户端上遇到了错误。
Error: xhr poll error
at XHR.Transport.onError (.\node_modules\engine.io-client\lib\transport.js:68:13)
at Request.<anonymous> (.\node_modules\engine.io-client\lib\transports\polling-xhr.js:132:10)
at Request.Emitter.emit (.\node_modules\component-emitter\index.js:145:20)
at Request.onError (.\node_modules\engine.io-client\lib\transports\polling-xhr.js:314:8)
at Timeout._onTimeout (.\node_modules\engine.io-client\lib\transports\polling-xhr.js:261:18)
at listOnTimeout (internal/timers.js:554:17)
at processTimers (internal/timers.js:497:7) {
type: 'TransportError',
description: 503
}
调试时,潜在的错误是
code:'UNABLE_TO_VERIFY_LEAF_SIGNATURE'
message:'unable to verify the first certificate'
stack:'Error: unable to verify the first certificate\n at TLSSocket.onConnectSecure (_tls_wrap.js:1502:34)\n at TLSSocket.emit (events.js:314:20)\n at TLSSocket._finishInit (_tls_wrap.js:937:8)\n at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:711:12)\n at TLSWrap.callbackTrampoline (internal/async_hooks.js:126:14)'
我尝试过更新 nodejs(从 8 到 12 再到 14),即使尝试过
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;
,也没有用。
唯一有效的是传递{rejectUnauthorized: false}
给 socket.io 客户端。这显然不应该是一个永久的解决方案。在浏览器(chrome、firefox)中打开网站不会出现任何错误。
我在 Windows 上,服务器在 linux 上。客户端有 2.4.0 版本的 socket.io-client。
letencrypt 是否更改了 socket.io 2.x 不支持的内容?我必须升级到3吗?(服务器和客户端?)或者在letsencrypt端出了什么问题?还有其他人遇到类似问题吗?
解决方案
推荐阅读
- jquery - 工具提示标题未动态刷新
- blockchain - 以太坊挖矿中的 Nonce
- r - 如何从 R 中的 HTML 选择/选项标签中抓取值
- php - 避免选择值操作
- java - 线程池中的 Netty 连接
- java - 通过 FileChooser 保存 pdf 格式在 java 中提示第二个对话框
- c++ - 带参数的数据结构的全局声明
- php - 使用正则表达式从多行中获取分离的数据
- android - 如何使用 GridLayout 在 Recyclerview + Cardview 中嵌入 Admob 原生广告和插页式广告
- ads-data-hub - 访问 Google Ads 数据中心