【发布时间】:2017-03-23 16:11:55
【问题描述】:
为这篇很长的帖子道歉,但我真的很想彻底……
我有一个专门的网站,作为在从远程服务器操作并在不同类型的操作系统(Linux、MacOS 和 Windows)上运行的各种环境模型之间交换数据的桥梁。 基本上每个服务器都可以上传/下载数据文件到网站,然后文件在另一台服务器上用于不同模型的进一步处理。
网站有一些基本的保护(IP 过滤、密码和使用 LetsEncrypt 证书的 SSL)。所有远程服务器都可以通过我们创建的简单 Web 界面访问该站点并上传/下载数据。
现在我们正在尝试使用一个简单的 python (2.7) 守护程序(基于 requests 模块)来自动化一些交换。守护程序监视某些文件夹并将内容上传到网站。
该守护程序在所有远程服务器上都能正常工作,除了一台运行 Windows 7 Enterprise 64 位的服务器。此服务器已安装 Python 2.7.13 和以下软件包:DateTime (4.1.1)、psutil (5.2.0)、pytz (2016.10)、requests (2.13.0)、zope.interface (4.3.3)。
从这个服务器,SSL 连接可以通过网络浏览器正常工作,但守护进程总是返回:
raise SSLError(e, request=request)
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)
这是我们迄今为止尝试过的:
- 设置验证=假。这工作正常,但我们不能在最终生产环境中使用它..
- 从守护进程工作的另一台服务器复制证书,并设置 verify=(name of the certificate file)(不成功)
- 将“用户代理”设置为与使用 Web 浏览器完成连接时从网站上的 Windows 计算机获得的字符串完全相同(不成功)
我们应该在 Windows 服务器上查看哪些其他设置来尝试解决问题?是否可以是防火墙设置以某种方式允许浏览器 SSL 连接但阻止 python 守护进程?
更新
运行产生错误的 Windows 远程服务器的组织在代理级别替换所有 SSL 证书。
他们的 IT 人员通过将我们网站的 URL 添加到其代理设置上的“通过”网站列表中解决了我们的问题。
这行得通,现在没问题。但是我想知道我们是否可以直接在 python 中处理证书替换...
【问题讨论】:
标签: python ssl-certificate python-requests windows-7-x64