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

Python连接Tableau服务器遇SSL证书验证失败问题求助

问题描述

我已通过Python代码成功下载证书,执行了以下命令:

sudo cp tableau-it.homedepot.com_0.cer /usr/local/share/ca-certificates/tableau.crt

ls /usr/local/share/ca-certificates

sudo update-ca-certificates

随后编写了如下Python代码连接Tableau服务器:

import sys
import os
import glob
import certifi
import tableauserverclient as TSC
import csv
import json
import pathlib

carFilePath = "/etc/ssl/certs/tableau.pem"
crtCAFilePath = "/etc/ssl/certs/ca-certificates.crt"
server = TSC.Server(SOURCE_SERVER_NAME, use_server_version=True)
tableau_auth = TSC.PersonalAccessTokenAuth(token_name=tableauAccessToken, personal_access_token=tableauAccessTokenValue, site_id=SOURCE_SITE_NAME)
server.add_http_options({'verify': True, 'cert': carFilePath})
server.use_server_version()
print(server.version)

print('Checking connection to Tableau server...')
with server.auth.sign_in(tableau_auth):
    print('Logged in to source server successfully')

运行代码后出现如下错误:

request method get, url: https://tableau-it.homedepot.com//api/2.4/serverInfo
[18:27:57] Begin blocking request to https://tableau-it.homedepot.com//api/2.4/serverInfo
Error making request to server: HTTPSConnectionPool(host='tableau-it.homedepot.com', port=443): Max retries exceeded with url: //api/2.4/serverInfo (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)')))
[18:27:57] Request complete
[18:27:58] Async request returned: received HTTPSConnectionPool(host='tableau-it.homedepot.com', port=443): Max retries exceeded with url: //api/2.4/serverInfo (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)')))
Response status: HTTPSConnectionPool(host='tableau-it.homedepot.com', port=443): Max retries exceeded with url: //api/2.4/serverInfo (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)')))
Could not get version info from server: <class 'OSError'>Response is not a http response?
versions: None, 2.4
request method get, url: https://tableau-it.homedepot.com//api/2.4/serverInfo
[18:27:58] Begin blocking request to https://tableau-it.homedepot.com//api/2.4/serverInfo
Error making request to server: HTTPSConnectionPool(host='tableau-it.homedepot.com', port=443): Max retries exceeded with url: //api/2.4/serverInfo (Caused by SSLError(SSLError(336265225, '[SSL] PEM lib (_ssl.c:3845)')))
[18:27:58] Request complete
[18:27:59] Async request returned: received HTTPSConnectionPool(host='tableau-it.homedepot.com', port=443): Max retries exceeded with url: //api/2.4/serverInfo (Caused by SSLError(SSLError(336265225, '[SSL] PEM lib (_ssl.c:3845)')))
Response status: HTTPSConnectionPool(host='tableau-it.homedepot.com', port=443): Max retries exceeded with url: //api/2.4/serverInfo (Caused by SSLError(SSLError(336265225, '[SSL] PEM lib (_ssl.c:3845)')))
Could not get version info from server: <class 'OSError'>Response is not a http response?
versions: None, 2.4
2.4
Checking connection to Tableau server...
Traceback (most recent call last):
  File "/var/lib/jenkins/virtual_environments/tableauServerClient/lib/python3.7/site-packages/urllib3/connectionpool.py", line 722, in urlopen
    chunked=chunked,
  File "/var/lib/jenkins/virtual_environments/tableauServerClient/lib/python3.7/site-packages/urllib3/connectionpool.py", line 404, in _make_request
    self._validate_conn(conn)
  File "/var/lib/jenkins/virtual_environments/tableauServerClient/lib/python3.7/site-packages/urllib3/connectionpool.py", line 1058, in _validate_conn
    conn.connect()
  File "/var/lib/jenkins/virtual_environments/tableauServerClient/lib/python3.7/site-packages/urllib3/connection.py", line 429, in connect
    tls_in_tls=tls_in_tls,
  File "/var/lib/jenkins/virtual_environments/tableauServerClient/lib/python3.7/site-packages/urllib3/util/ssl_.py", line 418, in ssl_wrap_socket
    context.load_cert_chain(certfile, keyfile)
ssl.SSLError: [SSL] PEM lib (_ssl.c:3845)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/var/lib/jenkins/virtual_environments/tableauServerClient/lib/python3.7/site-packages/requests/adapters.py", line 497, in send
    chunked=chunked,
  File "/var/lib/jenkins/virtual_environments/tableauServerClient/lib/python3.7/site-packages/urllib3/connectionpool.py", line 800, in urlopen
    method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
  File "/var/lib/jenkins/virtual_environments/tableauServerClient/lib/python3.7/site-packages/urllib3/util/retry.py", line 592, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='tableau-it.homedepot.com', port=443): Max retries exceeded with url: //api/2.4/auth/signin (Caused by SSLError(SSLError(336265225, '[SSL] PEM lib (_ssl.c:3845)')))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "checkConnTableau.py", line 41, in <module>
    with server.auth.sign_in(tableau_auth):
  File "/var/lib/jenkins/virtual_environments/tableauServerClient/lib/python3.7/site-packages/tableauserverclient/server/endpoint/endpoint.py", line 292, in wrapper
    return func(self, *args, **kwargs)
  File "/var/lib/jenkins/virtual_environments/tableauServerClient/lib/python3.7/site-packages/tableauserverclient/server/endpoint/auth_endpoint.py", line 32, in sign_in
    url, data=signin_req, **self.parent_srv.http_options, allow_redirects=False
  File "/var/lib/jenkins/virtual_environments/tableauServerClient/lib/python3.7/site-packages/requests/sessions.py", line 637, in post
    return self.request("POST", url, data=data, json=json, **kwargs)
  File "/var/lib/jenkins/virtual_environments/tableauServerClient/lib/python3.7/site-packages/requests/sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
  File "/var/lib/jenkins/virtual_environments/tableauServerClient/lib/python3.7/site-packages/requests/sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
  File "/var/lib/jenkins/virtual_environments/tableauServerClient/lib/python3.7/site-packages/requests/adapters.py", line 517, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='tableau-it.homedepot.com', port=443): Max retries exceeded with url: //api/2.4/auth/signin (Caused by SSLError(SSLError(336265225, '[SSL] PEM lib (_ssl.c:3845)')))

我尝试指定证书安装时生成的pem文件路径,但仍未解决问题。请问该如何解决此问题?


解决方案

1. 修复证书格式问题

错误[SSL] PEM lib说明Python无法解析指定的证书文件:

  • 先检查/etc/ssl/certs/tableau.pem的格式,确认内容以-----BEGIN CERTIFICATE-----开头、-----END CERTIFICATE-----结尾。如果是DER格式证书,执行转换命令:
    openssl x509 -inform der -in tableau-it.homedepot.com_0.cer -out tableau.pem
    
  • 将转换后的.pem文件复制到/usr/local/share/ca-certificates/,重新执行sudo update-ca-certificates。

2. 修正HTTP参数配置

代码中cert参数是用于客户端双向认证的,而你当前需要的是让Python信任服务器CA证书,应调整verify参数:

# 方法1:指定系统完整CA证书集合
server.add_http_options({'verify': '/etc/ssl/certs/ca-certificates.crt'})
# 方法2:直接指定单个证书文件
server.add_http_options({'verify': '/etc/ssl/certs/tableau.pem'})

移除cert参数,除非Tableau服务器明确要求客户端证书认证。

3. 强制Python使用系统CA证书

部分虚拟环境会默认使用certifi包的CA证书而非系统证书,可通过以下方式强制切换:

  • 环境变量方式:
    export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
    
  • 代码内指定:
    import os
    os.environ['REQUESTS_CA_BUNDLE'] = '/etc/ssl/certs/ca-certificates.crt'
    

4. 补充完整证书链

错误unable to get local issuer certificate说明缺少中间/根证书,获取服务器完整证书链:

openssl s_client -connect tableau-it.homedepot.com:443 -showcerts > full_chain.pem

将full_chain.pem重命名为tableau_chain.crt,复制到/usr/local/share/ca-certificates/后执行sudo update-ca-certificates。

5. 基础连接测试

先用requests库测试SSL连接,缩小问题范围:

import requests
response = requests.get('https://tableau-it.homedepot.com/api/2.4/serverInfo', verify='/etc/ssl/certs/tableau.pem')
print(response.status_code)

如果测试成功,再回到Tableau Server Client代码调整。


内容的提问来源于stack exchange,提问作者Eric Rosales

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:05:54