无法验证第一个证书
Unable to verify the first certificate
我有一个包含证书包、Python 脚本和节点脚本的目录。两个脚本都向同一个 URL 发出 GET 请求,并提供相同的证书包。 Python 脚本按预期发出请求,但是节点脚本抛出此错误:
{ [Error: unable to verify the first certificate] code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE' }
Python 脚本 (Python 3.4.3 和 requests 库):
import requests
print(requests.get(url, verify='/tmp/cert/cacert.pem'))
节点脚本(节点 4.2.6 和 request 库):
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.js 中关闭主机验证。
有人知道为什么 Node 会抛出这个错误吗?
也许您可以使用这个解决问题的模块,方法是下载浏览器通常使用的证书。
documentation对ca
选项的描述如下:
ca: A string, Buffer or array of strings or Buffers of trusted certificates in PEM format. If this is omitted several well known "root" CAs will be used, like VeriSign. These are used to authorize connections.
因此它不期望 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);
}
});
我有一个包含证书包、Python 脚本和节点脚本的目录。两个脚本都向同一个 URL 发出 GET 请求,并提供相同的证书包。 Python 脚本按预期发出请求,但是节点脚本抛出此错误:
{ [Error: unable to verify the first certificate] code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE' }
Python 脚本 (Python 3.4.3 和 requests 库):
import requests
print(requests.get(url, verify='/tmp/cert/cacert.pem'))
节点脚本(节点 4.2.6 和 request 库):
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.js 中关闭主机验证。
有人知道为什么 Node 会抛出这个错误吗?
也许您可以使用这个解决问题的模块,方法是下载浏览器通常使用的证书。
documentation对ca
选项的描述如下:
ca: A string, Buffer or array of strings or Buffers of trusted certificates in PEM format. If this is omitted several well known "root" CAs will be used, like VeriSign. These are used to authorize connections.
因此它不期望 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);
}
});