SharePoint REST API上传文件时SSL验证问题解决方案咨询
- 优先排查TLS版本兼容问题
目前所有SharePoint Online站点、多数2019及以上版本的内网SharePoint Server都已强制要求TLS 1.2及以上版本的加密连接,旧版Python环境默认协商低版本TLS会直接触发SSL握手失败,这也是这类场景下和通用requestsSSL问题最核心的差异,升级pyOpenSSL对这个问题完全无效。
直接在请求代码中强制指定TLS 1.2即可解决,参考实现:import ssl import requests from requests.adapters import HTTPAdapter from urllib3.util.ssl_ import create_urllib3_context class TLS12Adapter(HTTPAdapter): def init_poolmanager(self, *args, **kwargs): ssl_context = create_urllib3_context() ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2 kwargs["ssl_context"] = ssl_context return super().init_poolmanager(*args, **kwargs) session = requests.Session() session.mount("https://", TLS12Adapter()) # 后续所有SharePoint接口请求都使用该session实例发起 - 排查企业内网证书信任问题
如果是企业内网部署的本地SharePoint站点,基本都会使用私有CA签发的SSL证书,Python默认的证书信任链里没有企业根证书,也会报SSL错误。
可以先在请求中加verify=False参数临时关闭证书校验,快速验证是否是证书信任问题:
注意:关闭证书校验仅用于临时定位问题,正式环境禁止使用,需要导出企业根证书到本地,请求时指定证书路径即可:# 仅用于临时调试 resp = session.post(upload_endpoint, data=file_bytes, headers=auth_header, verify=False)resp = session.post(upload_endpoint, data=file_bytes, headers=auth_header, verify="./corp_root_ca.crt") - 冗余依赖清理
如果之前为了修复问题升级过pyOpenSSL,建议直接卸载相关冗余依赖,新版Python(3.7+)自带的ssl模块已经完全支持SharePoint需要的TLS和加密套件,额外安装pyOpenSSL反而可能因为依赖版本冲突触发新的SSL异常:pip uninstall -y pyOpenSSL
验证步骤:配置完成后先发起一个简单的SharePoint站点首页GET请求测试SSL连通性,确认SSL层无报错后,再调试上传接口的权限、请求体格式等业务参数,不要一开始就测大文件上传,增加问题定位成本。
内容的提问来源于stack exchange,提问作者Nicholas Taylor
相关产品推荐
相关产品推荐

