首页 > 解决方案 > 设置 NODE_EXTRA_CA_CERTS 后仍收到 SSL 错误“CERT_HAS_EXPIRED”

问题描述

由于我遇到了https://www.dampfer-board.de/等域的 SSL 错误(CERT_HAS_EXPIRED),我试图将当前 CA 添加到我的应用程序中

NODE_EXTRA_CA_CERTS=/var/www/xxx/cacert.pem

cacert.pem 是以下文件:https ://curl.haxx.se/ca/cacert.pem env 变量似乎设置正确(由 确认console.log(process.env.NODE_EXTRA_CA_CERTS)),但我仍然收到相同的 ssl 错误。

代码片段如下所示:

request.post({url: apiUrl, ecdhCurve: 'auto', headers: {
    'User-Agent': config.userAgent
}});

知道有什么问题吗?

标签: node.js

解决方案


openssl s_client -connect dampfer-board.de:443 -showcerts | openssl pkcs8在终端中运行会返回此输出。

depth=1 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
verify error:num=10:certificate has expired
notAfter=May 30 10:48:38 2020 GMT
verify return:0
depth=1 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
verify error:num=10:certificate has expired
notAfter=May 30 10:48:38 2020 GMT
verify return:0
depth=3 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
verify error:num=10:certificate has expired
notAfter=May 30 10:48:38 2020 GMT
verify return:0

在服务器证书链中有一个过期的证书AddTrust External CA Root

我通过从openssl 信任的证书列表中删除证书为 openssl 解决了这个问题。

我认为类似的修复可以应用于 Node.js。在Node 源中,此证书被烘焙为受信任的根。随着证书过期,现在是时候更新信任列表了May 30, 2020

NODE_EXTRA_CA_CERTS环境变量扩展了在源中烘焙的可信根,而该ca选项替换了它。

将您的请求修改为

request.post({
  url: apiUrl, 
  ecdhCurve: 'auto', 
  headers: {
    'User-Agent': config.userAgent
  },
  agentOptions: {
    ca: fs.readFileSync('./var/www/xxx/cacert.pem')
  }
});

推荐阅读