-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Description
I use a private Python package index server (anonymized as pypi.internal in the snippets below) that uses an ecdsa-with-SHA512 SSL certificate:
❯ openssl s_client -connect pypi.internal:443 < /dev/null 2>/dev/null | openssl x509 -in /dev/stdin -text -noout -certopt ca_default -certopt no_validity -certopt no_serial -certopt no_subject -certopt no_extensions -certopt no_sigdump
Signature Algorithm: ecdsa-with-SHA512
I am able to use pip to fetch and install Python packages from this index, but when I try to use uv it fails with the following error:
❯ uv pip install https://pypi.internal/pypi/package/version/package-version-py3-none-any.whl
error: Failed to download: `package @ https://pypi.internal/pypi/package/version/package-version-py3-none-any.whl`
Caused by: error sending request for url (https://pypi.internal/pypi/package/version/package-version-py3-none-any.whl)
Caused by: client error (Connect)
Caused by: invalid peer certificate: BadSignature
❯ uname -mv
#20~22.04.1-Ubuntu SMP Wed May 1 16:10:50 UTC 2024 x86_64
❯ uv --version
uv 0.2.15
I think this may be the same issue described by rust-lang/rustup#3820, because I understand uv depends on reqwest:
Line 112 in c28a2c7
| reqwest = { version = "0.12.3", default-features = false, features = ["json", "gzip", "brotli", "stream", "rustls-tls", "rustls-tls-native-roots"] } |
which depends on rustls using the ring feature: https://github.com/seanmonstar/reqwest/blob/c4ebb073438026e09c99469be02fc1f1a254058a/Cargo.toml#L181
and ring does not yet support the ECDSA SHA-512 certificate signature algorithm (WIP but has been open for over 8 months so it's not clear when it would land and be released: briansmith/ring#1631).
I was reading here that it may be possible to configure reqwest to use aws-lc-rs (which does provide support for the ECDSA SHA-512 algorithm for rustls) instead of ring. Here is a draft PR where it looks like rustup is trying to take this approach: rust-lang/rustup#3898
Would ya'll consider switching uv from using ring to aws-lc-rs to support fetching Python packages from an index server whose SSL certificate uses the ECDSA SHA-512 signature algorithm?