我在AWS上有这个网站(我们称之为 a.com(。它是使用 NodeJs 后端和视图前端完成的。它正在从其他某个 URL 调用另一个系统 API(我们称之为 b.com(以获取数据。
这个网站工作正常。我们更新了站点 b.com 的 SSL 证书,现在站点 a.com 无法从站点 b.com 接收数据。
当我检查AWS上的错误日志时,这是我发现的错误:
RequestError: Error: unable to verify the first certificate
at new RequestError (/var/app/current/node_modules/request-promise-core/lib/errors.js:14:15)
at Request.plumbing.callback (/var/app/current/node_modules/request-promise-core/lib/plumbing.js:87:29)
at Request.RP$callback [as _callback] (/var/app/current/node_modules/request-promise-core/lib/plumbing.js:46:31)
at self.callback (/var/app/current/node_modules/request/request.js:185:22)
at emitOne (events.js:116:13)
可能是什么问题?
我可以在 NodeJs 服务器上进行任何设置以从 b.com 加载数据吗?
该网站在我的本地主机上运行良好。
正如错误消息所说,验证 SSL 证书时出现问题b.com
.
我看到您正在使用request
库,因此作为解决方法,您可以在选项中传递strictSSL: false
:
{
url: 'https://b.com',
method: 'GET',
...
strictSSL: false
}
必要的警告:关闭所有SSL证书验证是危险的。如果您这样做,MiTM 攻击(例如本地网络上的嗅探器/欺骗器(可以读取或替换您的任何数据。如果你能帮助它,就不要这样做。
-
更好的解决方案:导出或以其他方式为进程设置
NODE_EXTRA_CA_CERTS
环境变量,并将其指向工作根证书 CA 文件。 -
配置等效:
npm config set cafile "<path to certificate file>"
-
更糟糕
的解决方案解决方法:导出或以其他方式设置环境变量NODE_TLS_REJECT_UNAUTHORIZED=0
。 -
等效配置:
npm config set strict-ssl false
。这可能不适用于忽略配置的安装脚本。