Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python 增强提案

PEP 449 – 移除 PyPI 镜像自动发现和命名方案

作者:
Donald Stufft <donald at stufft.io>
BDFL 代理:
Richard Jones <richard at python.org>
讨论地址:
Distutils-SIG 邮件列表
状态:
最终
类型:
流程
主题:
打包
创建:
2013 年 8 月 4 日
发布历史:
2013 年 8 月 4 日
替换:
381
决议:
Distutils-SIG 邮件

目录

摘要

本 PEP 提供了一个途径来弃用并最终移除 PyPI 镜像的自动发现,以及需要将 pypi.python.org 下的域名委派给第三方使用的硬编码命名方案。

理由

PyPI 镜像基础设施(在 PEP 381 中定义)提供了一种镜像 PyPI 内容的方法,供自动安装程序使用。它还提供了一种自动发现镜像的方法和一致的命名方案。

自动发现协议和命名方案存在一些问题。

  • 它们将 *.python.org 域名的控制权交给第三方,允许第三方在 pypi.python.org 和 python.org 域名上设置或读取 cookie。
  • 使用 pypi.python.org 的子域名意味着镜像运营者永远无法获得自己的 SSL 证书,而为他们提供 python.org 域名的证书是不可能发生的。
  • 自动发现使用未经身份验证的协议(DNS)。
  • 这些域名上缺少 TLS 证书意味着客户端无法确定他们是否没有成为 DNS 欺骗或中间人攻击的受害者。
  • 自动发现协议的设计目的是使客户端能够自动选择要使用的镜像。这不再是必要的要求,因为 PyPI 现在使用的 CDN 是一个全球分布式服务器网络,它将自动选择靠近客户端的服务器,而无需客户端的任何操作。
  • 自动发现协议和使用一致的命名方案只被一个安装程序(pip)实现过,并且它的实现除了不安全之外,在性能方面也存在严重问题,计划在下一个版本(1.5)中移除。
  • 虽然 PEP 381 中有一些规定可以解决这些问题中的一部分问题,但这些规定无法解决影响用户浏览器的那些问题。此外,这些规定至今还没有被任何安装程序实现。

由于存在许多问题,其中一些问题非常严重,以及 CDN 提供了自动发现和一致命名方案的大部分好处,因此本 PEP 建议首先弃用,然后移除用于镜像的 [a..z].pypi.python.org 名称和用于自动发现协议的 last.pypi.python.org 名称。镜像功能和镜像方法不会受到影响,并将继续存在,如 PEP 381 中所述。建议现有的镜像运营者获取自己的域名和证书,以便在他们希望继续托管镜像的情况下使用。

弃用和移除计划

本 PEP 被接受后,PyPI 上的文档将立即更新,以反映官方公共镜像的弃用性质,并将指导用户使用外部资源,如 http://www.pypi-mirrors.org/ 来发现非官方的公共镜像,如果他们希望使用的话。

镜像运营者,如果他们希望继续运营自己的镜像,应该获取一个域名来代表他们的镜像,以及,如果他们能够的话,获取一个 TLS 证书。获得域名后,他们应该将分配给他们的 N.pypi.python.org 域名重定向到他们的新域名。2014 年 2 月 15 日,[a..z].pypi.python.org 和 last.pypi.python.org 的 DNS 记录将被移除。在 2014 年 2 月 15 日之前的任何时间,镜像运营者都可以请求将他们的域名收回并重新指向主服务器。

为什么是 2014 年 2 月 15 日

本 PEP 中最关键的决定是最终截止日期。如果日期太早,那么它会不必要地惩罚用户,迫使他们放下所有工作来更新他们的部署脚本。如果日期太晚,那么延长的时间段对迁移工作没有帮助,只是将迁移推迟到以后的日期。

2014 年 2 月 15 日的日期之所以被选中,是因为它距离 PEP 发布日期大约 6 个月。这将确保足够长的时间,让人们能够更新他们的部署过程,以便指向新的域名,而不会仅仅延长截止日期。

为什么必须移除 DNS 记录

虽然可以简单地收回镜像使用的域名,并将它们重新指向 PyPI,以防止用户需要更新配置以指向这些域名,但这存在一些问题。

  • 任何目前在其配置中硬编码了这些名称的人,都将它们硬编码为 HTTP。这意味着通过允许这些名称继续解析,我们使 MITM 运营者可以通过在将重定向传递给客户端之前将其重写为 HTTPS 来轻松攻击用户。
  • 维护多个指向 PyPI 的域名产生的开销,对于已经收回的少量 N.pypi.python.org 域名来说,已经证明是麻烦的。当服务发生变化时,它们往往会被错误配置,这往往会导致它们在几个月内无法使用,直到有人注意到为止。通过保留它们,我们会让使用这些域名的用户容易受到随机故障的影响,而这些故障不太可能被发现或注意到。
  • 使用这些域名的人出于某种原因明确地选择使用它们。其中一个原因可能是他们不希望从位于特定国家/地区的宿主部署。如果这些域名继续解析,但没有指向它们现有的位置,那么我们就从现有域名的用户那里默默地去除了这种选择。

话虽如此,移除这些条目 *将* 要求那些修改了配置的用户,要么重新指向主服务器 (PyPI),要么选择一个新的镜像名称来指向。这被认为是一个令人遗憾的要求,以保护 PyPI 本身以及镜像的用户免受上述攻击,或者至少要求他们对安全性做出明智的决定。

公共或私有镜像

镜像协议将继续存在,如 PEP 381 中所定义,并鼓励人们根据需要托管公共和私有镜像。推荐的镜像客户端是 Bandersnatch


来源:https://github.com/python/peps/blob/main/peps/pep-0449.rst

最后修改时间:2023 年 9 月 9 日 17:39:29 GMT