使用 Let's Encrypt 证书通过 HTTPS 访问 CouchDB 时,节点无法验证第一个证书

Node unable to verify the first certificate when accessing CouchDB through HTTPS with a Let's Encrypt certificate

我实际上已经找到了这个问题的答案,只是想记录下我的发现。

问题与使用 Node.js 通过 HTTPS[=31 访问 CouchDB 有关=]. CouchDB 服务器配置了 SSL 证书,由 Let's Encrypt 生成。在local.ini中指定的cert_file包含服务器证书和问题的中间证书。当我通过浏览器验证 URL 时,连接显示为有效。但是,每当我尝试从 Node 获取相同的 URL 时,UNABLE_TO_VERIFY_LEAF_SIGNATURE / 无法验证第一个证书会抛出错误。

我尝试使用 NODE_EXTRA_CA_CERTS 环境变量将根证书添加到 Node。那失败了。然后,我尝试将中间证书添加到 NODE_EXTRA_CA_CERTS,它成功了。我可以就此打住,但不知何故我知道出了点问题。

经过更多的挖掘,我终于发现即使 cert_file 使用的 CouchDB 包括服务器证书和中间证书,与其他一些服务器不同,CouchDB 本身只会发回服务器证书。为了以正确的方式解决此问题,我需要将中间证书指定为 local.ini[=17 中的 cacert_file =] 文件也是如此。一旦我这样做了,错误就消失了。