Python 3.11连接Tableau服务器出现SSL握手失败问题求助
近期移除系统中的Anaconda并改用Python 3.11后,使用tableau_api_lib连接Tableau服务器时出现SSL握手失败错误:
ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1002)
完整错误信息:
SSLError: HTTPSConnectionPool(host='Tableau.com', port=443): Max retries exceeded with url: //api/3.19/serverinfo (Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1002)')))
使用的代码(已替换敏感数据):
from tableau_api_lib import TableauServerConnection from tableau_api_lib.utils.querying import get_views_dataframe, get_view_data_dataframe import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) tableau_server_config = { 'tableau_prod': { 'server': 'https://tableau.com/', 'api_version': '3.19', 'personal_access_token_name': 'fake_token', 'personal_access_token_secret': 'asldjaldkgjalsjda;lkgjalskdj093543jdlgkj34o59lka', 'site_name': 'Production', # not required 'site_url': '', # not required } } conn = TableauServerConnection(config_json=tableau_server_config, env='tableau_prod', ssl_verify=False) conn.sign_in() views_df = get_views_dataframe(conn)
更新依赖库版本:Python 3.11对旧版SSL相关库兼容性较差,执行以下命令升级所有相关依赖:
pip install --upgrade tableau_api_lib requests urllib3新版库通常会适配更高版本Python的SSL协议要求。
强制指定兼容的TLS协议:手动配置SSL上下文,禁用废弃的SSL/TLS版本,仅启用TLSv1.2及以上版本。修改代码如下:
from requests.adapters import HTTPAdapter from urllib3.poolmanager import PoolManager import ssl class TLSAdapter(HTTPAdapter): def init_poolmanager(self, *args, **kwargs): ctx = ssl.create_default_context() # 降低安全级别以兼容部分服务器配置(可选) ctx.set_ciphers('DEFAULT@SECLEVEL=1') # 禁用不安全的旧协议 ctx.options |= ssl.OP_NO_SSLv3 ctx.options |= ssl.OP_NO_TLSv1 ctx.options |= ssl.OP_NO_TLSv1_1 kwargs['ssl_context'] = ctx return super(TLSAdapter, self).init_poolmanager(*args, **kwargs) # 创建连接并挂载自定义适配器 conn = TableauServerConnection(config_json=tableau_server_config, env='tableau_prod', ssl_verify=False) conn.session.mount('https://', TLSAdapter()) conn.sign_in() views_df = get_views_dataframe(conn)检查系统SSL证书:Python 3.11使用系统默认证书存储,与Anaconda的证书池可能存在差异。
- Windows:更新系统根证书(通过Windows更新或手动导入缺失的证书)
- Linux:执行
sudo apt update && sudo apt install --reinstall ca-certificates更新证书 - macOS:执行
brew install openssl并确保系统证书链完整
确认服务器SSL配置:联系Tableau管理员,确认服务器已禁用SSLv3、TLSv1.0、TLSv1.1等废弃协议,仅启用TLSv1.2或TLSv1.3。
内容的提问来源于stack exchange,提问作者etech09

