【发布时间】:2020-01-20 00:44:40
【问题描述】:
我在 lambda 中使用 AWS.HttpRequest 来调用 HTTPS 端点,我收到此错误:
Error: unable to get local issuer certificate
at TLSSocket.<anonymous> (_tls_wrap.js:1105:38)
at emitNone (events.js:106:13)
at TLSSocket.emit (events.js:208:7)
at TLSSocket._finishInit (_tls_wrap.js:639:8)
at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:469:38) code: 'UNABLE_TO_GET_ISSUER_CERT_LOCALLY'
在使用 AWS.HttpRequest 时,我找不到任何关于 HTTPS 调用的具体操作信息。
基本上,我的代码是这样的(相当琐碎):
const req = new AWS.HttpRequest(url, region);
req.method = 'POST';
req.path = '/_bulk';
req.body = doc;
req.headers['Content-Type'] = 'application/json';
req.headers.Host = endpoint.host;
const send = new AWS.NodeHttpClient();
send.handleRequest(req, null, (httpResp) => {
let body = '';
httpResp.on('data', (chunk) => {
body += chunk;
});
httpResp.on('end', () => {
resolve({ response: httpResp, body });
});
}, (err) => {
reject(err);
});
如果端点是 HTTP(同一端点,仅在端口 80 上),代码可以正常工作,但如果我通过 HTTPS 端点,则会引发该错误。
更新:我用 https 节点库替换了 AWS.HttpRequest,我得到了同样的错误。看来我错过了什么。
【问题讨论】:
-
希望您已经确认端点拥有有效的证书。进行 https 调用不需要额外的配置。
-
是的,它确实有一个有效的证书。此外,如果我在浏览器中点击该端点,如果证书无效,Google Chrome 浏览器会抱怨,并且它没有抱怨,加载响应很好。
-
您的端点是否使用客户端证书验证?您可以尝试使用google.com 作为端点以确保它不是库问题。如果顺利的话,这与证书有关
标签: node.js amazon-web-services aws-lambda aws-sdk aws-sdk-js