Python3.6调用Google Calendar API遭遇证书验证失败问题求助
解决Google Calendar API证书验证失败问题
嘿,我看你在Python 3.6环境下用Google Calendar API的Service Account时,碰到了SSL证书验证失败的问题,调用get_calendar_list就触发500错误,而且已经确认Service Account是有效的对吧?结合你给出的代码、依赖版本和报错栈,我整理了几个可行的解决方向:
一、先把过期的证书依赖库升级了
你的certifi版本还是2018.4.16,这个版本的根证书库早就包含过期的证书了,这绝对是导致验证失败的核心原因。赶紧执行下面的命令更新相关依赖:
pip install --upgrade certifi requests google-auth
更新完之后重启服务,再试试调用API,大概率能解决问题。
二、手动指定CA证书路径(适合企业/自定义证书环境)
如果你的运行环境用了企业代理或者自定义CA证书,那得在请求里指定正确的证书路径。修改你CalendarService里的两个请求方法:
def get_calendar_list(self): # 把下面的路径换成你实际的CA证书文件路径,比如 "./company-ca.pem" response = self.authed_session.get(self.service_base_url, verify="/path/to/your/ca-cert.pem") calendar_list = response.json() return calendar_list def get_calendar(self): response = self.authed_session.get(self.get_service_url(), verify="/path/to/your/ca-cert.pem") calendar = response.json() return calendar
三、临时跳过证书验证(仅限测试!生产绝对不能用)
如果你只是想快速确认是不是证书的问题,可以临时关掉证书验证——注意,这会有安全风险,生产环境千万别这么干:
def get_calendar_list(self): response = self.authed_session.get(self.service_base_url, verify=False) calendar_list = response.json() return calendar_list
要是这么改之后能成功调用API,那百分百就是证书验证的锅,赶紧回到前两个方案彻底解决。
四、检查网络代理的干扰
如果你所在的网络用了代理,代理的证书可能会搞乱SSL验证。可以先试试关掉代理再测试,要是必须用代理,就在代码里配置代理和对应的证书:
def __init__(self, calendar_id=''): self.credentials = get_credentials() self.authed_session = AuthorizedSession(self.credentials) # 添加代理配置 proxies = { 'http': 'http://your-proxy-address:port', 'https': 'https://your-proxy-address:port', } self.authed_session.proxies = proxies # 指定代理的CA证书路径 self.authed_session.verify = "/path/to/proxy-ca-cert.pem" self.service_base_url = 'https://www.googleapis.com/calendar/v3/users/me/calendarList' self.calendar_id = calendar_id
另外,再快速确认下get_credentials方法是不是正确加载了Service Account的密钥文件,虽然你说账号有效,但有时候路径错了也会有奇怪的报错,不过这个概率比较低啦。
内容的提问来源于stack exchange,提问作者techhighlands
相关产品推荐
相关产品推荐

