gpt4 book ai didi

javascript - Node.js 请求 CERT_HAS_EXPIRED

转载 作者:IT老高 更新时间:2023-10-28 21:54:36 47 4
gpt4 key购买 nike

我正在使用 Mikeal 的请求 (https://github.com/mikeal/request) 向服务器发出 https 请求。但是,我不断收到 CERT_HAS_EXPIRED 的授权错误。

request({
url: 'https://www.domain.com/api/endpoint',
strictSSL: false
}, function(error, response, body) {
if(!error && response.statusCode == 200) {
res.json(JSON.parse(body));
} else {
res.json(response.statusCode, {'error': 'error'})
}
});

我尝试将 strictSSL 设置为 true 和 false,两者都输出相同的 CERT_HAS_EXPIRED 错误。是什么导致了这个问题,有什么办法可以在 nodejs 中解决它?

最佳答案

解决此问题的最佳方法:

更新证书。这可以使用 Greenlock 免费完成。通过 Let's Encrypt™ v2 颁发证书

一个less不安全的方法来解决这个问题:

'use strict';

var request = require('request');
var agentOptions;
var agent;

agentOptions = {
host: 'www.example.com'
, port: '443'
, path: '/'
, rejectUnauthorized: false
};

agent = new https.Agent(agentOptions);

request({
url: "https://www.example.com/api/endpoint"
, method: 'GET'
, agent: agent
}, function (err, resp, body) {
// ...
});

通过将 agentrejectUnauthorized 一起使用,您至少可以将安全漏洞限制在处理该站点的请求中,而不是使您的整个 Node 进程完全、完全不安全.

其他选项

如果您使用的是自签名证书,您将添加此选项:

agentOptions.ca = [ selfSignedRootCaPemCrtBuffer ];

对于受信任的对等连接,您还可以添加以下 2 个选项:

agentOptions.key = clientPemKeyBuffer;
agentOptions.cert = clientPemCrtSignedBySelfSignedRootCaBuffer;

坏主意

不幸的是,process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; 甚至被记录在案。它应该只用于调试,并且永远不应该将它变成可以在野外运行的代码。几乎每个在 https 上运行的库都有一种传递代理选项的方法。那些不应该修复的。

关于javascript - Node.js 请求 CERT_HAS_EXPIRED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20433287/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com