3.14.4 TLS 证书

原文链接: https://docs.astral.sh/uv/concepts/authentication/certificates/

3.14.4 TLS 证书

uv 使用 TLS 与包索引和其他 HTTPS 服务器安全通信。TLS 证书用于验证这些服务器的身份,确保连接不会被拦截。

TLS 后端

uv 使用 rustls(用 Rust 编写的内存安全 TLS 实现),并以 aws-lc-rs 作为加密提供程序。

uv 支持以下 X.509 证书签名算法:

  • 带 SHA-256、SHA-384 或 SHA-512 的 ECDSA(P-256、P-384、P-521)
  • Ed25519
  • 带 SHA-256、SHA-384 或 SHA-512 的 RSA PKCS#1 v1.5(2048–8192 位)
  • 带 SHA-256、SHA-384 或 SHA-512 的 RSA-PSS(2048–8192 位)

系统证书

默认情况下,uv 使用内置的 Mozilla 根证书进行 TLS 验证。某些情况下,你可能想改用平台原生的证书存储 —— 例如你依赖某个包含在系统证书存储中的企业信任根(比如用于强制代理)。

要使用系统证书,请传入 --system-certs 标志、把 UV_SYSTEM_CERTS 环境变量设为 true,或在 uv.toml 中设置 system-certs = true。

使用系统证书时,证书校验由 rustls-platform-verifier 执行,它会委托给操作系统的证书校验器。

自定义证书

要使用自定义 CA 证书,请把 SSL_CERT_FILE 环境变量设置为 PEM 编码证书包的路径(例如 certs.pem、ca-bundle.crt),或把 SSL_CERT_DIR 设置为一个或多个包含 PEM 编码证书文件的目录。支持多个条目,使用平台相关的分隔符(Unix 上为 :,Windows 上为 ;)。

注意

对于单次 uv pip 调用,可以传入 --cert 并给出 PEM 编码证书包的路径。该证书包会替换 uv 在该次调用中的默认证书来源。

证书通常以 .pem、.crt 或 .cer 扩展名存储,但 uv 会尝试从所提供的 SSL_CERT_DIR 中的任何普通文件读取证书。

无法解析为 PEM 证书的文件会被忽略。uv 会解析符号链接,并忽略悬空符号链接。

不支持 DER 编码的文件。

当这些环境变量被设置为非空值时,它们会完全覆盖默认证书来源 —— 只有提供的证书会被信任。如果配置的文件或目录不存在,或不包含任何有效证书,则不会信任任何默认证书。

SSL_CERT_FILE 可以指向单个证书或包含多个证书的证书包。SSL_CERT_DIR 可以包含多个目录条目;uv 会从每个目录加载所有有效证书。

如果需要客户端证书身份验证(mTLS),请把 SSL_CLIENT_CERT 环境变量设置为一个 PEM 格式文件的路径,该文件先包含证书、后包含私钥。

不安全主机

如果你所处的环境需要信任自签名证书,或以其他方式禁用证书校验,可以通过 allow-insecure-host 配置选项让 uv 允许与特定主机建立不安全连接。例如,在 pyproject.toml 中加入下面内容会允许与 example.com 建立不安全连接:

1
2
[tool.uv]
allow-insecure-host = ["example.com"]

allow-insecure-host 期望接收主机名(例如 localhost)或主机名-端口对(例如 localhost:8080),且仅适用于 HTTPS 连接,因为 HTTP 连接本身就不安全。

请谨慎使用 allow-insecure-host,并且只在可信环境中使用,因为缺少证书校验可能使你面临安全风险。

最后修改 September 25, 2026: 更新 (221c74c33)