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

AWS Lambda(Python3.8)中SSL验证失败问题排查求助

解决AWS Lambda中Python请求API时的SSL验证失败(ssl.SSLEOFError)问题

可能的原因及修复方案

1. 显式指定CA证书路径

AWS Lambda的Python运行时自带CA证书,但自定义安装的Certifi可能覆盖默认路径,导致证书无法被requests识别。

  • 修复代码:
    import certifi
    import requests
    
    # 强制使用Certifi提供的证书文件
    response = requests.post(
        "https://api.pagerduty.com/xxx",
        verify=certifi.where()
    )
    
  • 同时确认部署包中包含certifi/cacert.pem文件,避免打包时遗漏证书资源。

2. 排查PyOpenSSL兼容性冲突

Python 3.8的Lambda运行时自带ssl库,额外安装的PyOpenSSL可能与系统库版本冲突,引发SSL协议错误。

  • 修复:
    • 尝试降低PyOpenSSL版本至22.1.0(该版本与Python 3.8兼容性较好),修改requirements.txt:
      pyOpenSSL==22.1.0
      certifi==2024.2.2
      
    • 若无需自定义SSL功能,直接移除PyOpenSSL依赖,使用Lambda自带的ssl库即可。

3. 验证网络访问权限

EOF错误有时并非证书问题,而是VPC/安全组限制了Lambda的出站HTTPS流量。

  • 修复:
    • 若Lambda部署在VPC内,确保配置了NAT网关,允许出站访问443端口。
    • 检查安全组出站规则,添加允许访问api.pagerduty.com的HTTPS(443端口)流量。
    • 先测试请求公开HTTPS站点(如https://httpbin.org/post),确认是否为网络层面的问题。

4. 强制指定兼容的TLS版本

PagerDuty API要求使用TLS 1.2及以上版本,Lambda默认的TLS配置可能不匹配。

  • 修复代码:
    import ssl
    import requests
    from requests.adapters import HTTPAdapter
    from urllib3.poolmanager import PoolManager
    
    class TLS12Adapter(HTTPAdapter):
        def init_poolmanager(self, *args, **kwargs):
            ctx = ssl.create_default_context()
            # 禁用旧版TLS,强制使用1.2+
            ctx.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1
            ctx.set_ciphers('DEFAULT@SECLEVEL=1')
            kwargs['ssl_context'] = ctx
            return super().init_poolmanager(*args, **kwargs)
    
    # 给requests会话挂载自定义适配器
    session = requests.Session()
    session.mount('https://', TLS12Adapter())
    response = session.post("https://api.pagerduty.com/xxx")
    

5. 构建兼容Lambda环境的依赖包

本地环境(如macOS)编译的依赖可能与Lambda的Amazon Linux 2环境不兼容,引发SSL底层错误。

  • 修复:使用Docker在Amazon Linux 2环境中构建依赖:
    # 挂载当前目录到容器,安装依赖到指定目录
    docker run -v "$PWD":/var/task public.ecr.aws/sam/build-python3.8:latest /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.8/site-packages/"
    
  • 随后用CDK部署该目录下的依赖,确保二进制文件与Lambda运行时兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:50:25