使用eb init部署Flask应用时Elastic Beanstalk SSL验证失败排查
问题:EB CLI执行eb init时SSL证书验证失败
运行eb init部署Flask应用至Elastic Beanstalk环境时,出现SSL错误:
ERROR: SSLError - SSL validation failed for https://elasticbeanstalk.us-west-2.amazonaws.com/ [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:997)
该问题由工作电脑的Zscaler VPN拦截默认CA证书导致,此前曾通过指定Zscaler证书解决过同类SSL错误,但无法解决EB CLI的该问题。
已尝试的操作:
- 在
/home/.aws路径下创建命名配置文件,执行命令:eb init --profile eb-cli,配置文件内容如下:[profile eb-cli] aws_access_key_id = xxxx aws_secret_access_key = xxxx region = us-west-2 output = json ca_bundle = my-cert-path\zscaler-cert.pem - 在项目的
/home/project/.elasticbeanstalk/config.yml中指定该AWS命名配置文件:global: profile: eb-cli - 手动设置CA Bundle环境变量:
set AWS_CA_BUNDLE=my-cert-path/zscaler-cert.pem
同样需要SSL验证的AWS CLI命令(如aws ec2 describe-instances --region us-west-2)可正常运行,AWS CLI能识别新证书,但EB CLI的eb init命令不行。原以为AWS与EB配置文件可互通,或AWS命名配置文件可用于配置EB环境,求问问题出在哪里?
解决思路与方案
问题根源
EB CLI与AWS CLI读取CA证书配置的逻辑存在差异:
- EB CLI的
eb init命令在初始化阶段,不会读取AWS配置文件中的ca_bundle参数,也不会优先识别AWS_CA_BUNDLE环境变量,而是依赖系统默认的CA证书池。 - 配置中使用了混合路径分隔符(
\和/),不同系统的路径格式不兼容,可能导致EB CLI无法定位证书文件。
具体解决步骤
统一证书路径格式
- Linux/macOS系统:路径全部使用正斜杠
/,例如ca_bundle = /full/absolute/path/to/zscaler-cert.pem - Windows系统:使用双反斜杠
\\或正斜杠/,例如ca_bundle = C:/my-cert-path/zscaler-cert.pem
- Linux/macOS系统:路径全部使用正斜杠
执行eb init时直接指定CA证书
运行eb init时通过--ca-bundle参数直接传入证书的绝对路径:eb init --profile eb-cli --ca-bundle /full/absolute/path/to/zscaler-cert.pem配置EB CLI全局参数
在用户目录下的全局EB配置文件~/.elasticbeanstalk/config.yml中添加CA证书配置:global: ca_bundle: /full/absolute/path/to/zscaler-cert.pem profile: eb-cli确保环境变量生效
- Linux/macOS系统需用
export命令设置环境变量:export AWS_CA_BUNDLE=/full/absolute/path/to/zscaler-cert.pem - Windows系统执行
echo %AWS_CA_BUNDLE%验证环境变量是否正确配置
- Linux/macOS系统需用
额外建议
EB CLI的旧版本可能存在配置读取逻辑缺陷,建议升级至最新稳定版:
pip install --upgrade awsebcli
内容的提问来源于stack exchange,提问作者Hakob.Abajian
相关产品推荐
相关产品推荐

