MacOS环境连接GCP遇SSL证书验证失败,如何关闭校验或配置代理
问题解决方案
前置修正
你提供的代码存在缩进错误,try代码块下的逻辑没有正确缩进,运行前请先调整为合规的Python缩进格式。
方案1:关闭SSL校验(仅本地临时调试用,禁止生产环境使用)
注意:关闭SSL校验会暴露通信内容,存在数据被窃听、篡改的安全风险,仅可用于本地排查问题,不得用于任何线上环境
操作方式如下:
- 可通过设置全局环境变量直接关闭requests库的SSL校验,在代码开头添加以下配置:
import os os.environ['REQUESTS_CA_BUNDLE'] = '' os.environ['CURL_CA_BUNDLE'] = ''
- 也可在创建GCS客户端时传入自定义HTTP会话,单独关闭当前客户端的SSL校验,修改后的代码如下:
import os import requests from google.cloud import storage def gcsStorageClient(errLogRef): try: # 自定义会话,关闭SSL校验 session = requests.Session() session.verify = False storage_client = storage.Client( project=os.environ.get("project_name"), _http=session ) bucket = storage_client.get_bucket(os.environ.get("bucket_name")) blob = bucket.get_blob(os.environ.get("private_key_file")) file = blob.download_as_string() return file except Exception as error: print("error:: ", error)
方案2:配置代理连接GCP
可以通过环境变量或者代码配置两种方式设置代理:
- 终端环境变量配置(运行脚本前执行,替换为你实际的代理地址):
# 无认证代理配置 export HTTP_PROXY=http://代理IP:端口 export HTTPS_PROXY=http://代理IP:端口 # 需认证代理配置 # export HTTPS_PROXY=http://用户名:密码@代理IP:端口
- 代码内硬编码配置代理,修改后的代码如下:
import os import requests from google.cloud import storage def gcsStorageClient(errLogRef): try: # 自定义会话,配置代理 session = requests.Session() session.proxies = { "http": "http://代理IP:端口", "https": "http://代理IP:端口" } # 如果不需要关闭SSL可删除下一行 session.verify = False storage_client = storage.Client( project=os.environ.get("project_name"), _http=session ) bucket = storage_client.get_bucket(os.environ.get("bucket_name")) blob = bucket.get_blob(os.environ.get("private_key_file")) file = blob.download_as_string() return file except Exception as error: print("error:: ", error)
Mac系统专属排查方案
多数情况下Mac出现该SSL报错不是防火墙拦截,是Python未安装系统根证书导致的,可先尝试执行以下命令修复,无需关闭SSL即可解决问题:
- 如果是Python官网下载安装的版本,直接运行对应版本的证书安装脚本:
# 把3.x替换为你实际使用的Python版本,比如3.9、3.10 /Applications/Python\ 3.x/Install\ Certificates.command
- 如果是Homebrew安装的Python,执行以下命令更新根证书:
brew install ca-certificates
内容的提问来源于stack exchange,提问作者Saurabh
相关产品推荐
相关产品推荐

