gpt4 book ai didi

node.js - 错误: CERT_HAS_EXPIRED in Node. js请求模块(macu vs facebook)

转载 作者:太空宇宙 更新时间:2023-11-03 14:12:25 25 4
gpt4 key购买 nike

我的 WebProxy 是在 Node 中构建的。我正在使用 request 模块从给定的 Url 中获取内容。我收到了关于 https://www.macu.comCERT_HAS_EXPIRED 错误而网站在浏览器中打开正常。

我的调查

我通过 Chrome 调查并检查了证书详细信息,但我发现证书没有过期。我不明白这个网站的证书有什么问题。

我认为这可能是 Node.js 列表中不存在的供应商的问题。我尝试升级 npm 和 Node 版本但没有成功。此外https://www.facebook.com的证书也由 DigiCert High Assurance CA-3 供应商颁发,清楚地表明该供应商存在于 Node.js CA 列表中。

代码如下:

var request = require('request');

function getContent(urlOptions) {
request.get(urlOptions, function(error, response, body) {
if (error) console.log('Error:' + error);

if (body) {
console.log('Body:' + body);
}
});
}

exports.init = function() {
var urlOptions = {
headers: {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding': 'gzip,deflate,sdch',
'Accept-Language': 'en-US,en;q=0.8',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36'
},
secureProtocol: 'TLSv1_method'
};

/* URL options for macu.com domain */
urlOptions.url = 'https://www.macu.com/mystyle-checking';
urlOptions.headers.host = urlOptions.headers.Host = 'www.macu.com';
// urlOptions.rejectUnauthorized = false; // Works when this option is set but it may cause security issue

getContent(urlOptions);

urlOptions.url = 'https://www.facebook.com';
urlOptions.headers.host = urlOptions.headers.Host = 'www.facebook.com';

getContent(urlOptions);
};

我只想知道

  1. 为什么请求模块提示 macu.com 而不是 facebook.com,而两者都拥有同一供应商的证书。
  2. macu 的证书有什么问题?
  3. 为什么证书对 Node 抛出错误但被浏览器接受。

最佳答案

DigiCert High Assurance EV Root CA 的中间证书似乎已过期,请参阅 f.e. https://www.sslshopper.com/ssl-checker.html#hostname=www.macu.com

可能你的浏览器没有提示它,因为它已经安装了一个更新的、有效的中间证书版本(并用它来证明签名机构的身份),而在你的 Node 实例上它仍然是旧的一个(并将其呈现给对方)。

编辑:进一步说明:当双方协商加密连接时,发起方将出示其证书和中间证书,以便对方可以验证它们。

如果您的浏览器已经将最新的中间证书 DigiCert High Assurance EV Root CA 存储在自己的证书缓存中,那么它可能会使用它来验证它所提供的证书.

但是,其他方(例如您的 node.js 模块)可能没有自己存储的中间证书,因此他们依赖于所提供的内容。如果链中的其中一个证书过期,则整个证书的验证将因此失败。

关于node.js - 错误: CERT_HAS_EXPIRED in Node. js请求模块(macu vs facebook),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27716511/

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