求助:Smartsheet Python SDK出现_ssl.c:997 SSL证书验证失败错误
Smartsheet Python SDK SSL证书验证失败问题解决
问题描述
六个月前编写的Smartsheet API访问代码突然无法运行,示例代码如下:
import smartsheet api_key = "ABCD1234" smartsheet_client = smartsheet.Smartsheet(api_key) smartsheet_client.errors_as_exceptions(True) print("Hello World\n") sheets = smartsheet_client.Sheets.list_sheets(include_all=True).data print(sheets)
运行后触发smartsheet.exceptions.HttpError,核心错误为:
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get issuer certificate (_ssl.c:997)
已尝试的操作:
- 调整requests和certifi版本,替换certifi的cacert.pem为api-smartsheet-com-chain证书链文件
- curl命令加
--ssl-no-revoke可正常访问,默认命令返回证书吊销检查失败 - 使用requests指定verify.pem的代码曾正常运行一天,之后返回令牌无效,重新生成令牌也无效
- 其他设备代码正常,本地重建虚拟环境后正常一天,随后SSL错误再次出现
解决方案(优先使用Smartsheet Python SDK)
配置SDK跳过证书吊销检查
结合curl测试结果,问题大概率出在证书吊销验证环节。Smartsheet Python SDK基于requests库,可以直接修改客户端session的参数来禁用吊销检查:import smartsheet api_key = "ABCD1234" smartsheet_client = smartsheet.Smartsheet(api_key) # 禁用证书吊销检查(仅测试/受限环境使用,生产环境不建议) smartsheet_client.session.verify = False smartsheet_client.errors_as_exceptions(True) sheets = smartsheet_client.Sheets.list_sheets(include_all=True).data print(sheets)强制指定SDK使用的CA证书链
如果替换certifi默认证书不稳定,可以直接在SDK中指定完整的Smartsheet证书链文件路径,避免环境自动替换的问题:smartsheet_client.session.verify = "/path/to/api-smartsheet-com-chain.pem"确保证书文件包含所有中间证书和根证书,避免链不完整导致的验证失败。
固定依赖版本并排查环境问题
- 固定requests和certifi版本(例如
requests==2.31.0、certifi==2024.2.2),防止依赖自动更新引发兼容性问题 - 检查系统SSL证书存储,确保Smartsheet API所属证书颁发机构的根证书已正确安装
- 排查是否有代理、防火墙拦截SSL握手,导致证书链传输不完整
- 固定requests和certifi版本(例如
解决令牌无效问题
- 确认API令牌未设置IP限制、权限限制,且令牌本身未过期
- 检查代理是否篡改请求头,导致令牌在传输中丢失或被修改
内容的提问来源于stack exchange,提问作者parzival
相关产品推荐
相关产品推荐

