Node.js SSL 错误:错误的版本号:../deps/openssl/openssl/ssl/record/ssl3_record.c:332
Posted
技术标签:
【中文标题】Node.js SSL 错误:错误的版本号:../deps/openssl/openssl/ssl/record/ssl3_record.c:332【英文标题】:Node.js SSL error: wrong version number: ../deps/openssl/openssl/ssl/record/ssl3_record.c:332 【发布时间】:2022-01-22 12:09:08 【问题描述】:使用 Node.js 和交叉获取时,我在访问 HTTPS 站点时收到错误消息(请参阅下面的标题和 cmets)。不涉及代理。下面的代码是重现错误的简化版本。代码中的 cmets 包含准确的错误文本。
这一直有效,直到某些(?)发生变化,这让我相信服务器端的变化,我无法访问。但是,使用 GM_xmlhttpRequest 执行相同请求的 Tampermonkey JS 脚本仍然可以正常工作。
任何调试建议,或者为什么会生成“错误的版本号”?
编辑:在调试器中查看对tlssock.connect(options, tlssock._start);
的调用,'ciphers' 选项设置为ciphers: "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA"
,'port' 选项为 443。在 TLSSocket 成员中,我没有看到任何跳出的东西在我与版本号有关。
const fetch = require('cross-fetch');
const testURL = 'https://api.torn.com/faction/?selections=upgrades&key=xxxxxxxxxx';
fetch(testURL).then(res =>
console.log('[TEST] res: ', res);
).then(data =>
console.log('[TEST] data: ', data);
).catch(err =>
console.error("[TEST] error: ", err);
);
/*
Output:
[TEST] error: FetchError: request to https://api.torn.com/faction/?selections=upgrades&key=xxxxxxxxxx failed,
reason: write EPROTO 140735681590144:
error:1408F10B:SSL routines:ssl3_get_record:
wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:332:
at ClientRequest.<anonymous> (/Users/edlau/Documents/Torn-JS/Fac-chat-generic/node_modules/node-fetch/lib/index.js:1461:11)
at ClientRequest.emit (events.js:400:28)
at TLSSocket.socketErrorListener (_http_client.js:475:9)
at TLSSocket.emit (events.js:400:28)
at emitErrorNT (internal/streams/destroy.js:106:8)
at emitErrorCloseNT (internal/streams/destroy.js:74:3)
at processTicksAndRejections (internal/process/task_queues.js:82:21)
type: 'system',
errno: 'EPROTO',
code: 'EPROTO'
*/
编辑2:我将node.js更新到最新,结果相同,版本信息如下:
npm version
facchat: '2.0.0',
npm: '8.3.0',
node: '17.3.0',
v8: '9.6.180.15-node.12',
uv: '1.42.0',
zlib: '1.2.11',
brotli: '1.0.9',
ares: '1.18.1',
modules: '102',
nghttp2: '1.45.1',
napi: '8',
llhttp: '6.0.4',
openssl: '3.0.1+quic',
cldr: '40.0',
icu: '70.1',
tz: '2021a3',
unicode: '14.0',
ngtcp2: '0.1.0-DEV',
nghttp3: '0.1.0-DEV'
编辑 3:使用 CURL(到相同的 URL): curl:(35)错误:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:未知协议
【问题讨论】:
【参考方案1】:在玩了几个小时后,将其简化为仅使用 curl 和各种选项,但都没有奏效 - 它终于再次奏效了。没有选择。我的测试代码现在也可以正常工作。所以我得出结论,这是服务器端“维护”正在进行,或者被路由到不同的服务器,服务器托管,据我所知,在 cloudflare 环境中。
因此,虽然我不能确定是什么造成了这种情况,但我无法再重现它。
【讨论】:
以上是关于Node.js SSL 错误:错误的版本号:../deps/openssl/openssl/ssl/record/ssl3_record.c:332的主要内容,如果未能解决你的问题,请参考以下文章
Node.js使用https请求时,出现“SSL23_GET_SERVER_HELLO”错误
卷曲错误:错误:1408F10B:SSL 例程:SSL3_GET_RECORD:错误的版本号
错误:写入 EPROTO 4455222784:错误:1408F10B:SSL 例程:ssl3_get_record:错误的版本号:../deps/openssl/openssl/ssl/record