Python 3.11下使用slack_bolt遭遇SSL证书验证失败问题求助
问题分析与解决方案
slack_bolt 本身并无官方记录的与 Python 3.11 的 SSL 兼容问题,你遇到的证书验证失败,本质是 Python 3.11 在 CA 证书路径配置上和 3.9 存在差异,尤其在企业环境(可能存在内部证书代理)下更易出现。以下是针对性解决方法:
方法1:为slack_bolt指定企业CA证书路径
slack_bolt 依赖的 HTTP 客户端可通过环境变量或代码直接指定信任的CA证书:
- 环境变量方式:启动脚本前设置:
export REQUESTS_CA_BUNDLE=/path/to/company/ca.crt # 或针对urllib3设置 export SSL_CERT_FILE=/path/to/company/ca.crt - 代码内配置:初始化App时传入自定义HTTP客户端,加载企业证书:
import os from slack_bolt import App from slack_bolt.adapter.socket_mode import SocketModeHandler import ssl from slack_sdk.http_client import HttpClient # 加载企业CA证书创建SSL上下文 ssl_context = ssl.create_default_context(cafile="/path/to/company/ca.crt") http_client = HttpClient(ssl=ssl_context) SLACK_BOT_TOKEN = "<bot_token>" SLACK_APP_TOKEN = "<app_token>" app = App(token=SLACK_BOT_TOKEN, http_client=http_client) if __name__ == "__main__": SocketModeHandler(app, SLACK_APP_TOKEN).start()
方法2:修复Python3.11的CA证书缺失问题
Python 3.11 可能未正确关联系统CA证书,不同系统处理方式如下:
- Windows:下载企业信任的CA证书包(如cacert.pem),设置环境变量
SSL_CERT_FILE指向该文件;或替换Python安装目录Lib\site-packages\certifi下的cacert.pem文件。 - Linux/macOS:确保系统CA证书包已安装,将Python3.11的certifi证书链接到系统证书:
# Linux示例 sudo apt install ca-certificates ln -s /etc/ssl/certs/ca-certificates.crt /usr/local/lib/python3.11/site-packages/certifi/cacert.pem
方法3:临时跳过证书验证(仅测试环境使用)
绝对禁止在生产环境使用,仅用于快速排查问题:
import os from slack_bolt import App from slack_bolt.adapter.socket_mode import SocketModeHandler import ssl from slack_sdk.http_client import HttpClient # 创建不验证证书的SSL上下文 ssl_context = ssl._create_unverified_context() http_client = HttpClient(ssl=ssl_context) SLACK_BOT_TOKEN = "<bot_token>" SLACK_APP_TOKEN = "<app_token>" app = App(token=SLACK_BOT_TOKEN, http_client=http_client) if __name__ == "__main__": SocketModeHandler(app, SLACK_APP_TOKEN).start()
额外排查点
- 确认企业网络是否有代理,Python3.11需正确配置
HTTP_PROXY和HTTPS_PROXY环境变量; - 更新slack_bolt到最新版本:
pip install --upgrade slack-bolt slack-sdk
内容的提问来源于stack exchange,提问作者Sandeep Chaudhary
相关产品推荐
相关产品推荐

