3.14.4 TLS 证书
3 分钟阅读
原文链接: 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 建立不安全连接:
| |
allow-insecure-host 期望接收主机名(例如 localhost)或主机名-端口对(例如 localhost:8080),且仅适用于 HTTPS 连接,因为 HTTP 连接本身就不安全。
请谨慎使用 allow-insecure-host,并且只在可信环境中使用,因为缺少证书校验可能使你面临安全风险。