You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地Node脚本调用AWS SDK证书错误,AWS CLI却正常运行

本地Lambda辅助工具AWS SDK证书错误与CLI表现差异的原因及解决

问题场景

本地运行包含DynamoDB及AWS服务调用的Lambda辅助工具时,AWS SDK抛出TLS证书错误:

Error: unable to get local issuer certificate
    at TLSSocket.onConnectSecure (node:_tls_wrap:1558:34)
    at TLSSocket.emit (node:events:512:28)
    at TLSSocket.emit (node:domain:489:12)
    at TLSSocket._finishInit (node:_tls_wrap:977:8)
    at ssl.onhandshakedone (node:_tls_wrap:771:12)
    at TLSWrap.callbackTrampoline (node:internal/async_hooks:130:17) {
  code: 'NetworkingError',
  region: <myregion>,
  hostname: 'dynamodb.<myregion>.amazonaws.com',
  retryable: true,
  time: 2024-03-06T16:08:09.372Z
}

但AWS CLI执行aws s3 ls等请求完全正常,且Shell中设置的AWS_CA_BUNDLE环境变量对CLI有效,脚本也能读取其他AWS环境变量。

核心原因及解决

1. AWS SDK与CLI对AWS_CA_BUNDLE的支持逻辑不同

AWS CLI基于Python的botocore库,会自动识别AWS_CA_BUNDLE环境变量;但不同语言的AWS SDK(比如Node.js SDK v2)默认不会自动读取该变量,因为其底层TLS实现依赖语言自身的证书机制,而非AWS统一的配置逻辑。

解决示例(Node.js):

  • 初始化客户端时手动指定证书路径:
const { DynamoDB } = require('aws-sdk');
const fs = require('fs');

const dynamodbClient = new DynamoDB({
  region: '<your-region>',
  caBundle: fs.readFileSync('/绝对路径/到/ca-bundle.pem')
});
  • 或者通过语言专属环境变量传递证书:
export NODE_EXTRA_CA_CERTS="/绝对路径/到/ca-bundle.pem"
node your-script.js

2. 环境变量传递范围不一致

如果脚本是通过IDE、后台进程或其他非Shell直接启动的方式运行,可能没有继承Shell中配置的AWS_CA_BUNDLE变量——CLI直接在Shell环境执行,能拿到变量,而脚本的运行环境未加载Shell的环境配置(比如.bashrc/.zshrc中的设置)。

验证方法:在脚本开头打印环境变量值,比如Node.js中执行console.log(process.env.AWS_CA_BUNDLE),确认是否为空。

3. AWS SDK版本过低

旧版本的AWS SDK可能未实现AWS_CA_BUNDLE的读取逻辑,而AWS CLI使用的botocore库版本较新,已经支持该变量。

解决:升级AWS SDK到最新稳定版,例如Node.js执行npm update aws-sdk。

4. 证书路径格式问题

部分SDK对证书路径的要求更严格,比如必须使用绝对路径,而CLI可以识别相对路径;若路径包含空格、特殊字符,SDK可能未正确解析,而CLI做了兼容处理。

解决:确保证书路径为绝对路径,且无特殊字符,或对路径进行转义处理。


内容的提问来源于stack exchange,提问作者nickhealy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 08:30:21