SSL: CERTIFICATE_VERIFY_FAILED Error in Python 是什么问题?
在最新版本的Stable Diffusion webui 版本上使用最新下载的模型时,出现了类似的错误。
SSL: CERTIFICATE_VERIFY_FAILED
错误在Python中通常表示你的程序试图通过HTTPS连接到某个服务器,但Python无法验证该服务器提供的SSL证书。这可能是因为以下几种原因之一:
-
系统缺少CA证书:这是最常见的原因,特别是在某些操作系统(如macOS)上,默认安装的Python版本可能没有包含最新的或任何的CA证书包。你可以通过安装
certifi
库来解决这个问题,它提供了一个最新的CA证书集合。 -
自签名证书或不受信任的证书:如果你正在尝试连接的服务使用的是自签名证书或者是从一个不受信任的CA签发的证书,Python默认会拒绝建立连接。
-
网络问题:有时,中间人攻击或者网络配置问题也可能导致这个错误。例如,某些公司网络可能会进行SSL拦截,这会导致证书验证失败。
解决方案
-
如果问题是由于缺少CA证书引起的,可以通过安装
certifi
并确保你的Python环境正确地使用这些证书来解决。运行pip install certifi
安装包。在代码中,你也可以明确指定使用
certifi
提供的证书:import ssl import certifi context = ssl.create_default_context(cafile=certifi.where()) # 然后将这个context用于你的HTTPS连接
-
如果你需要与使用自签名证书的服务器通信,可以在创建请求时忽略证书验证(不推荐在生产环境中这样做,因为这会使你的连接容易受到中间人攻击):
import urllib.request # 忽略证书验证 ctx = ssl.create_default_context() ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE response = urllib.request.urlopen('https://your-url.com', context=ctx)
-
对于企业级应用,如果遇到SSL拦截的问题,可能需要联系IT部门获取正确的CA证书,并将其添加到你的系统或Python环境的信任存储中。
确保根据你的具体情况选择合适的解决方案。如果不确定具体原因,可以逐步排查上述可能性。
在解决这个问题上猜测是MACOS版本的Python3.10中缺少了部分认证
通过进入Stable Diffusion的虚拟环境中进行安装
source ./venv/bin/active
pip install certify
有的时候存在无法安装
ERROR: Could not find a version that satisfies the requirement certify (from versions: none)
这种情况下采用以下方式
/Applications/Python\ 3.10/Install\ Certificates.command
运行命令后,重启Stable Diffusion ,再次使用新模型,问题解决。
/Applications/Python 3.10/Install Certificates.command
是一个针对macOS用户的脚本,主要用于安装或更新Python 3.10发行版中的SSL证书。这个脚本特别有用,因为在某些操作系统上(尤其是macOS),默认情况下可能缺少必要的CA证书来验证HTTPS连接的SSL证书,这会导致如SSL: CERTIFICATE_VERIFY_FAILED
这样的错误。
这个脚本的作用
- 安装证书:它会自动安装最新的CA证书到你的Python环境中,使得你可以通过HTTPS安全地访问外部资源。
- 解决常见问题:主要是为了解决由于缺少CA证书而导致的SSL证书验证失败的问题。
###手动如何运行
-
找到脚本:在Finder中打开“应用程序”文件夹,然后进入“Python 3.10”文件夹。你会看到名为
Install Certificates.command
的文件。 -
运行脚本:
- 可以直接双击该脚本运行。
- 或者,在终端中执行以下命令来手动运行它:
注意这里的反斜杠/Applications/Python\ 3.10/Install\ Certificates.command
\
是用来转义空格的,确保路径正确无误。
脚本内容解析
虽然你不需要修改这个脚本,但了解它的基本功能是有帮助的。通常,这个脚本会:
- 使用
certifi
库来获取最新的一组可信的CA证书。 - 将这些证书配置给你的Python环境,以便所有使用标准库
http.client
和urllib.request
等进行HTTPS请求时都能正确验证SSL证书。
运行这个脚本是解决由于缺少适当CA证书导致的SSL验证问题的一种简单方法。对于使用Python进行网络编程、数据抓取或其他需要HTTPS连接操作的人来说,这是一个非常有用的工具。如果你已经遇到了SSL: CERTIFICATE_VERIFY_FAILED
错误,尝试运行这个脚本来解决问题是一个不错的起点。如果问题仍然存在,可能需要进一步检查你的网络设置或联系系统管理员。