繁体   English   中英

无法验证第一个证书

[英]Unable to verify the first certificate

我有一个包含证书捆绑包,Python脚本和Node脚本的目录。 这两个脚本都向相同的URL发出GET请求,并且提供了相同的证书包。 Python脚本按预期发出请求,但是节点脚本抛出此错误:

{[错误:无法验证第一个证书]代码:'UNABLE_TO_VERIFY_LEAF_SIGNATURE'}

Python脚本(Python 3.4.3和请求库)

import requests
print(requests.get(url, verify='/tmp/cert/cacert.pem'))

节点脚本(节点4.2.6和请求库)

var fs = require('fs');
var request = require('request');

request.get({
    url: url,
    agentOptions: {
        ca: fs.readFileSync('/tmp/cert/cacert.pem')
    }
}, function (error, response, body) {
    if (error) {
        console.log(error);
    } else {
        console.log(body);
    }
});

两者都使用相同的OpenSSL版本:

$ python -c 'import ssl; print(ssl.OPENSSL_VERSION)'
OpenSSL 1.0.2e-fips 3 Dec 2015

$ node -pe process.versions.openssl 
1.0.2e

我认为证书捆绑包不存在问题,并且我不想在Node中关闭主机验证。

有人知道为什么Node抛出此错误吗?

文档描述了ca选项,如下所示:

ca:PEM格式的信任证书的字符串,缓冲区或字符串数​​组或缓冲区。 如果省略此选项,将使用多个众所周知的“根” CA,例如VeriSign。 这些用于授权连接。

因此,它不希望使用CA捆绑软件。 修复很简单,只需像这样拆分捆绑包:

var fs = require('fs');
var request = require('request');

var certs = fs.readFileSync('/tmp/cert/cacert.pem').toString().split("\n\n"); 

request.get({
    url: url,
    agentOptions: {
        ca: certs
    }
}, function (error, response, body) {
    if (error) {
        console.log(error);
    } else {
        console.log(body);
    }
});

也许您可以通过下载浏览器通常使用的证书来使用解决该问题的模块。

https://www.npmjs.com/package/ssl-root-cas

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM