配置GOOGLE_APPLICATION_CREDENTIALS访问GCS遇SSL证书验证失败求助
问题
我编写了一段代码,通过设置os.environ['GOOGLE_APPLICATION_CREDENTIALS']指向包含认证信息的JSON文件,以访问Google Cloud Platform(GCP)存储桶并下载Parquet数据,代码如下:
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'file.json' def extract(self, config: CloudStorageConfig) -> pd.DataFrame: path = f'gs://{config.bucket}/{config.blob}' data = pd.read_parquet(path) return data
该代码在同事的环境中可正常运行,但在我本地执行时抛出如下错误:
aiohttp.client_exceptions.ClientConnectorCertificateError: Cannot connect to host storage.googleapis.com:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1006)')]
目前我已实现一个替代函数临时完成数据下载:
def alt_extract(config, json_filepath=r'file.json', filename=None) -> pd.DataFrame: if json_filepath is None: raise KeyError('Credentials are missing') with open(json_filepath) as source: info = json.load(source) storage_credentials = service_account.Credentials.from_service_account_info(info) storage_client = storage.Client(project=constants.GCS_PROJECT_ID, credentials=storage_credentials) bucket = storage_client.bucket(config.bucket) blob = bucket.blob(config.blob) blob.download_to_filename(filename) data = pd.read_parquet(filename) return data
但代码上线到生产环境后仍需使用原函数,请问该错误的原因是什么?
错误原因分析
- 本地SSL证书缺失/未配置:你的本地Python环境缺少验证Google服务SSL证书所需的根证书。
pd.read_parquet访问gs://路径时,依赖的底层库(比如gcsfs)会用aiohttp发起HTTPS请求,而你的系统没有正确配置SSL根证书链,导致无法验证storage.googleapis.com的证书合法性。 - 本地代理/网络环境干扰:如果你的本地网络使用了代理(比如公司内网代理、VPN),代理可能拦截了HTTPS请求并替换了证书,而你的Python环境没有信任代理提供的证书,从而触发证书验证失败。同事的环境可能代理配置已正确适配,或者没有使用代理。
- Python环境差异:你和同事的Python环境版本、依赖库版本不同。比如gcsfs、aiohttp、pandas的版本差异,可能导致证书处理逻辑不同;或者同事的环境中已经手动安装/更新了SSL证书包(比如certifi),而你的环境中certifi包版本过旧或未正确安装。
- 环境变量配置生效问题:虽然你设置了
GOOGLE_APPLICATION_CREDENTIALS环境变量,但可能在代码执行时该变量没有正确生效,导致底层库尝试用默认方式认证,间接引发证书相关的错误(不过这种情况更常出现认证错误,而非单纯的证书验证失败,但也需排查)。
内容的提问来源于stack exchange,提问作者eredinbreaccglas
相关产品推荐
相关产品推荐

