当前位置: 首页 > 知识库问答 >
问题:

节点。js请求证书已过期

韦衡
2023-03-14

我正在使用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'})
        }
});

我已经尝试将严格SSL设置为true和false,两者输出相同的CERT_HAS_EXPIRED错误。是什么导致了这个问题,有没有办法在nodejs中修复它?

共有3个答案

严成礼
2023-03-14

如果今天有人在使用旧版本的nodejs时出现此问题,这可能是因为让我们加密2021 9月30日根CA到期,这在回答中已经提到。

证书在节点源代码中硬编码,新的ISRG Root X1证书仅在此提交中添加。

可以更新他们的节点版本,使用node--use-openssl-ca标志(假设openssl证书是最新的),使用其他答案中提到的超文本传输协议代理解决方案(我没有测试它),或者设置process.env.NODE_TLS_REJECT_UNAUTHORIZED=0作为快速而肮脏的解决方法。

胡永逸
2023-03-14

在文件顶部添加以下内容:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

危险这会在整个节点上禁用HTTPS/SSL/TLS检查。js环境。请参阅下面使用https代理的解决方案。

濮阳振海
2023-03-14

续订证书。这可以使用Greenlock免费完成,Greenlock通过Let’s颁发证书

'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) {
  // ...
});

通过将代理与rejectUnauthorized一起使用,您至少可以将安全漏洞限制在处理该站点的请求上,而不是使整个节点进程完全不安全。

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

agentOptions.ca = [ selfSignedRootCaPemCrtBuffer ];

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

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

不幸的是,这个过程。环境。NODE\u TLS\u REJECT\u UNAUTHORIZED=“0” 甚至有文档记录。它应该只用于调试,而不应该使其成为在野外运行的某种代码。几乎每个在https上运行的库都有一种传递代理选项的方法。那些不需要的应该被修复。

 类似资料:
  • 我正在尝试在后端节点中发出http请求。js web app。我可以在前端web javascript文件上发出成功的完整http请求,如下所示: 并遵循本指南:https://nodejs.dev/learn/make-an-http-post-request-using-nodejs 我一直试图在node中发出相同的请求。js后端: 但运行上述请求会导致以下错误: 我设置url/path设置的

  • 我正在用nodejs和MongoDB创建我的第一个API,我想创建一个类似“localhost:3050/user/name”的GET请求。所以我建立了这个: ...

  • 我在循环中的节点JS中发送这样的GET请求 由于响应是异步的,是否可以在响应中获取原始请求URL? 谢谢!

  • 问题内容: 尝试运行Discord机器人时,遇到此错误: 它刚刚开始无处不在,并且每次都在发生。 我在Windows 10上使用python 3.8 这是什么意思,我该如何解决? 问题答案: 要解决此问题: 使用Internet Explorer转到discord.com(以管理员身份运行) 点击右上角的锁 点击查看证书 安装一个 PS:如果您的防病毒软件对Web浏览器有效,并且此解决方案不起作用

  • 然而,我不认为这会影响我,因为我的开发机器是最新的。 但是从今天开始,我在执行时得到消息 我只是下载了最新的windows git(2.33.0),并确认了openssl中的构建是最新的,这应该很好 问题不在于颁发的证书本身,它没有过期,也没有被chrome(windows证书存储)和Firefox接受。 欢迎提出任何建议。

  • 问题内容: 我正在使用出色的Request库在Node中下载我正在使用的小型命令行工具中的文件。Request非常适合拉入单个文件,完全没有问题,但不适用于ZIP。 例如,我正在尝试下载URL上的Twitter Bootstrap 存档: 该代码的相关部分是: 我也尝试将编码设置为“二进制”,但没有运气。实际的zip约为74KB,但是通过上述代码下载时约为134KB,并在Finder中双击以提取它