DEBUG.WIKI
V.PS:让项目靠近用户,亚太、欧洲、北美 KVM VPS
IPPeak:从目标地区访问网页,住宅代理、SEO 监测、广告验证
ZgoCloud:多地区部署,按需选节点;日本、美国、香港、德国

pip 访问私有 IP 索引,报 check_hostname requires server_hostname

私有HTTPS索引用IP,旧pip可能在TLS包装阶段缺server_hostname。核对正式修复与实际工具版本,私有CA和IP身份仍需正常校验。

使用 https:// 加 IP 地址的私有包索引时,pip 在握手阶段抛出 ValueError: check_hostname requires server_hostname。先保留完整异常链,区分 TLS 调用缺少服务器身份参数,与证书链本身不被信任的错误。

pip 24.2、24.3 的一条旧故障路径涉及 IP 地址、系统证书信任接口与 pip 内置的 HTTP 库。相关修复已进入 pip 26.1;本文不是建议所有 HTTPS 错误都靠升级消失,也不把关闭验证作为下载私有依赖的处理办法。

确认运行版本和实际请求路径

在失败项目使用的解释器中检查:

python -m pip --version
python -c 'import sys; print(sys.executable); print(sys.version)'

核对索引 URL 是否用了 IP、是否经过 HTTP 或 HTTPS 代理、现有 CA 配置,以及栈中是否经过 pip/_vendor/urllib3、truststore 和 ssl.wrap_socket。日志中的 server_hostname 是 TLS 接口参数,不是让你在普通 pip 命令后随便添加一个同名选项。

对外分享日志前隐藏索引凭据、代理认证和内部路径。检查应保持原网络入口,不能拿公共 PyPI 的成功证明私有 IP 路径已经正常,也不能为了对照将带认证的请求改发到其他服务。

如果错误是 CERTIFICATE_VERIFY_FAILED,程序已经在做另一类校验,应检查 CA、证书链、有效期及访问身份。只把两种报错都称为“证书问题”,会让处理步骤失去针对性。

修复 pip 的内置传输库路径

在受支持的项目 Python 环境里,按项目既有工具管理流程评估兼容的正式 pip 版本。以 pip 26.2.1 为例,要求 Python 至少为 3.10;旧 Python 环境不能盲目安装这版,应先确定受支持的环境迁移与工具组合。

当前内置传输实现会将 IP 对应的 server_hostname 继续传给 TLS 包装接口,避免旧路径中仅依靠关闭 hostname checking 的处理。升级后仍应核对真正执行的 pip,而不是只看到安装命令曾经返回成功。

给应用安装一个普通的新版 urllib3,通常不会替换 pip 自己 vendored 的库。不要在 pip 安装目录里手改源码,也不要把曾经用于诊断的 legacy-certs 开关写成每个私有索引的默认方案。

工具升级修复的是这条旧调用路径。当前版本仍报同样异常时,需要重新检查完整栈、代理隧道和自定义 SSL 配置,不能仅凭相同错误文字断定又是旧问题。

私有 CA 与访问身份仍然要正确

在 Python 3.10 及以上,pip 24.2 起默认将系统证书与 certifi 一起用于验证。系统尚未配置私有 CA 时,也可以按现有组织规则,通过 --cert 或 PIP_CERT 指定已核实的 CA bundle;这些配置选择信任材料,不会自动关闭服务器身份验证。

用 IP 访问时,服务端证书需要与实际访问的 IP 身份匹配。证书只覆盖域名、已经过期或链不完整,不能靠增加一个无关 CA 修复。若服务本来设计为域名入口,应按实际 DNS 和证书配置访问该入口,不为消除错误随意换域名。

私有 CA 应从已确认的管理渠道取得。不要把 trusted-host、HTTP 索引或禁用验证留在最终配置中,再把下载成功当作安全连接已恢复。

保存原工具版本、索引与 CA 配置,在独立可重建环境先验证原私有来源、正常证书校验和原依赖安装,再运行应用需要的功能。回退时恢复相应工具与配置组合;恢复文本不会自动撤销环境里已下载、安装的包。若通过 HTTPS 代理且错误发生在代理连接,应另外区分代理 CA 与目标 CA。