无法validation叶签名
我使用node.js request.js来达到api。 我得到这个错误
[错误:UNABLE_TO_VERIFY_LEAF_SIGNATURE]
我所有的凭据都是准确和有效的,服务器很好。 我向邮递员提出了同样的要求。
request({ "url": domain+"/api/orders/originator/"+id, "method": "GET", "headers":{ "X-API-VERSION": 1, "X-API-KEY": key }, }, function(err, response, body){ console.log(err); console.log(response); console.log(body); });
这段代码只是运行在一个可执行的脚本前。 node ./run_file.js
,这是为什么? 是否需要在服务器上运行?
这也工作
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
这不是应用程序的问题,而是由中间CA签署的证书。 如果您接受这一事实,并仍想继续操作,请添加以下内容以请求选项:
rejectUnauthorized: false
完整要求:
request({ "rejectUnauthorized": false, "url": domain+"/api/orders/originator/"+id, "method": "GET", "headers":{ "X-API-VERSION": 1, "X-API-KEY": key }, }, function(err, response, body){ console.log(err); console.log(response); console.log(body); });
安全的解决scheme是将必要的证书添加到链中。 首先从npm安装ssl-root-cas软件包:
npm install ssl-root-cas
这个包包含许多浏览器信任的中间证书,但是节点没有。
var sslRootCAs = require('ssl-root-cas/latest') sslRootCAs.inject()
将添加缺less的证书。 在这里看到更多的信息:
CoolAJ86的解决scheme是正确的,它不会损害您的安全性,如禁用所有使用rejectUnauthorized
或NODE_TLS_REJECT_UNAUTHORIZED
检查。 但是,您可能需要明确注入额外的CA证书。
我首先尝试了ssl-root-cas模块包含的根CA:
require('ssl-root-cas/latest') .inject();
我仍然以UNABLE_TO_VERIFY_LEAF_SIGNATURE
错误结束。 然后,我发现是谁为我通过COMODO SSL分析器连接的网站颁发了证书,下载了该权限的证书,并试图仅添加该证书:
require('ssl-root-cas/latest') .addFile(__dirname + '/comodohigh-assurancesecureserverca.crt');
我结束了另一个错误: CERT_UNTRUSTED
。 最后,我注入了额外的根CA,包括“我的”(显然是中介)CA,
require('ssl-root-cas/latest') .inject() .addFile(__dirname + '/comodohigh-assurancesecureserverca.crt');
把这个放在这里是为了帮助别人,我的情况是不同的,有点奇怪的混合。 我是通过superagent来访问这个请求的 – 这个问题与证书没有关系(安装正确),所有的事情都是通过asynchronous模块的瀑布callback来传递超级结果。 解决方法:不要传递整个结果,而只需通过瀑布的callbackresult.body
传递result.body
。
在子域上安装GoDaddy证书后,我的Apacheconfiguration出现问题。 我原本以为这可能是一个问题,没有发送服务器名称指示器(SNI),但事实并非如此。 使用https://www.ssllabs.com/ssltest/分析子域的SSL证书返回错误;链问题:不完整 。
在通过SSLCertificateChainFile
Apache指令添加GoDaddy提供的gd_bundle-g2-g1.crt
文件后,Node能够通过HTTPS进行连接,并且错误消失。