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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 12:22:06