首页 > 解决方案 > 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端出了什么问题?还有其他人遇到类似问题吗?

标签: node.jssocket.iossl-certificatetls1.2lets-encrypt

解决方案


推荐阅读