无法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的证书。 在这里看到更多的信息:

https://github.com/coolaj86/node-ssl-root-cas

CoolAJ86的解决scheme是正确的,它不会损害您的安全性,如禁用所有使用rejectUnauthorizedNODE_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进行连接,并且错误消失。