node.js - 设置 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
}});
知道有什么问题吗?
解决方案
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')
}
});
推荐阅读
- linux - SSH远程隧道,我错过了什么吗?
- python - discord.ext.commands.errors.ExtensionFailed: Extension 'cogs.utility' 引发错误:IndentationError: expected an indented block utility.py line 11
- react-native - 绑定元素 'navigator' 隐式具有 'any' 类型
- azure - 通过 Azure DevOps Pipelines 部署 DACPAC 时出错
- r - 改变中线ggplot geom_boxplot()的颜色
- scroll - 如何在 Sublime Text 3 中更改鼠标滚轮滚动速度?
- reactjs - DraftJs:不变违规:使用 convertToRaw 时块不是 BlockNode
- swiftui - 在 SwiftUI 中制作聊天应用程序:如何让 ScrollView 在键盘出现时保持原位?
- terraform - 无法使用 indexing_policy 块创建 azurerm_cosmosdb_sql_container
- tensorflow - ValueError:lstm_3 层需要 35 个输入,但它接收到 3 个输入张量