javascript - Node.js 请求 CERT_HAS_EXPIRED

标签 javascript node.js express request

我正在使用 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/

相关文章:

node.js - 如何在node js中访问另一个文件中的变量

javascript - 使用 Material-ui 过渡时如何修复 'TypeError: Cannot read property ' style' of undefined' 错误

javascript - NodeJS MongoDB 连接字符串问题

javascript - Jquery 在悬停时显示文本 - Looped Item

node.js - 快速解析正文或查询参数中的内容

express - 如何将 Yeoman 与 Express/Jade/Stylus 一起使用?

javascript - 为什么我的 httpresponse 是空的?

javascript - 仅当窗口宽度调整大小时才调用 jquery 函数

javascript - jQuery Cycle 寻呼机功能使用现有的缩略图进行导航

javascript - 连接到 MongoDB node.js 时出错 - 未定义客户端