使用Flask-GitHub OAuth时触发requests.exceptions.SSLError求助
解决Flask-GitHub授权时的TLSv1协议版本SSL错误
嘿,这个问题我之前碰到过,本质是GitHub早就停止支持TLSv1和TLSv1.1这类旧加密协议了,你的请求用了被废弃的协议版本,所以被GitHub服务器直接拒绝了。通常这个问题出在两个核心点:旧版本的requests库,或者你的Python版本太老。下面给你几个解决方案,按顺序试就行:
1. 先升级requests库
Flask-GitHub底层靠requests发HTTPS请求,旧版requests默认会用较老的TLS协议。直接升级到最新兼容版:
# 通用升级命令 pip install --upgrade requests # 如果还在坚持用Python 2.7,要指定兼容的最高版本(2.7已经停更了,建议尽快换3.x) pip install requests==2.27.1
2. 检查并升级Python版本
如果升级requests后还是报错,那大概率是Python版本的锅:
- Python 2.7.9之前的版本,自带的SSL库不支持TLSv1.2及以上
- Python 3.4及以下也存在类似的协议支持问题
长远来看,强烈建议你升级到Python 3.7+(Python 2.7已经停止维护好几年了,安全漏洞没人修),这是一劳永逸的办法。
3. 临时强制使用TLSv1.2(迫不得已的备选方案)
如果暂时没法升级Python或依赖库,可以试试在代码里强制requests用TLSv1.2。修改你的Flask应用代码,在初始化GitHub对象前加这段:
import requests from requests.adapters import HTTPAdapter from urllib3.poolmanager import PoolManager import ssl from flask import Flask from flask_github import GitHub app = Flask(__name__) # 自定义适配器,强制使用TLSv1.2+ class TLSAdapter(HTTPAdapter): def init_poolmanager(self, *args, **kwargs): ctx = ssl.create_default_context() ctx.set_ciphers('DEFAULT@SECLEVEL=1') # 禁用TLSv1和TLSv1.1 ctx.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 kwargs['ssl_context'] = ctx return super(TLSAdapter, self).init_poolmanager(*args, **kwargs) # 创建会话并挂载适配器 session = requests.Session() session.mount('https://', TLSAdapter()) # 让Flask-GitHub使用这个自定义会话 github = GitHub(app) github.session = session # 剩下的路由和配置正常写
不过这只是临时救急的办法,还是尽快升级Python和依赖库更稳妥。
内容的提问来源于stack exchange,提问作者Ajax1234
相关产品推荐
相关产品推荐

