微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Nodejs ssl3_get_record 错误的版本号

如何解决Nodejs ssl3_get_record 错误的版本号

在过去的几个月里,我一直致力于一个涉及 Nodejs (12.16.1) 的项目。 我创建了一个后端 API(数据库和其他资源)和一个身份验证服务。我目前正在更新一个使用 nodejs 的 discord 机器人(都使用相同的节点版本和相同的节点提取)。 机器人在连接到后端 API 时遇到问题。使用 node-fetch 出现以下错误

request to https://<host:port>/api/bot/<resource> Failed,reason: write EPROTO 1988:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:c:\\ws\\deps\\openssl\\openssl\\ssl\\record\\ssl3_record.c:332:\n

我没有使用代理,事实上它是一个在本地主机下运行的开发环境。几个月来一直没有问题。 现在是有趣的部分。 bot 可以很好地向身份验证服务发送 POST,但在使用 POST 或 GET 到后端时会失败。 Postman 访问 API 没有问题。以为这是我制作的新证书(自签名),但我仍然收到相同的错误消息。

所以我使用了 Wireshark 并捕获了 Bot 身份验证服务和后端之间的流量。当机器人与身份验证服务交谈时,它会在 TLS 1.3 中执行 Hello 客户端/服务器消息。但是,当它与后端通信时,它会尝试使用 TLS 1.0。

认为任何新的当前代码都会导致问题,我从我的回购中提取了后端和机器人的新副本,然后再次尝试。即使是当前的 Live 构建也会失败并显示相同的错误消息。 我不知道发生了什么,我只编码了几个月,这是我遇到的第一堵我似乎无法弄清楚的墙。 Goolge 甚至堆栈都没有太大帮助,因为 ssl3 错误版本错误没有得到解答或与我的问题不符(大多数人在使用代理时似乎都有这个问题)。

唯一更新了软件的是最新的 Windows 10 更新。 KB4598242、KB4023057

谢谢。

编辑。 server.js

const port = process.env.PORT;

const key = fs.readFileSync('./server.key');
const cert = fs.readFileSync('./server.cert');
app.use(jwt());
app.use(express.json());
app.use(cors());
app.use('/api/bot',require('routes/botapi'));
const server = https.createServer({'key': key,'cert': cert},app);
server.listen(port,() => { console.log(chalk.green(`[SERVER]`) + `: listening on ${port}`) });

botapi.js

...requires
const botRouter = express.Router();

botRouter.post('/updatemembers',discordUpdateMembers);

async function discordUpdateMembers(req,res,next) {
    let validRole = await hasBotRole(req);
    if (!validRole) return res.status(400).send({err: 'Access_Denied!!'});
    discord.updateMembers(req.body)
    .then(members => members ? res.json(members) : res.status(400))
    .catch(err => next(err));
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。