Skip to content

build(deps): Drop vendored webpki root bundles - #829

Merged
untitaker merged 2 commits into
mainfrom
build/drop-vendored-webpki-roots
Oct 22, 2026
Merged

untitaker merged 2 commits into
mainfrom
build/drop-vendored-webpki-roots

Conversation

@sentry-junior

@sentry-junior sentry-junior Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Removes the vendored Mozilla root bundles (webpki-roots, webpki-root-certs) from Cargo.lock, so CA distrust events stop showing up as dependency bumps here. Certificate verification uses the system trust store from the image's ca-certificates instead.

Follow-up to INC-2600, where rolling out trust bundle updates across repos was painful.

Refs STREAM-1941

  • sqlx: tls-rustls-ring-webpki → tls-rustls-ring-native-roots. sqlx only verifies against roots with sslmode=verify-ca/verify-full. Those modes already take sslrootcert, and today the webpki roots just get added on top of it.
  • sentry: use the reqwest feature instead of transport, and enable reqwest's default-tls directly. transport turns on sentry's native-tls feature, which includes ureq?/native-tls. Cargo then writes an unused ureq and its webpki-root-certs into the lockfile, even though neither is ever built. The SDK still sends over native-tls (OpenSSL with the system store), same as before.

Net lockfile change: removes ureq, ureq-proto, utf8-zero, der, pem-rfc7468, webpki-root-certs and both webpki-roots versions, and adds rustls-native-certs.

Draft until CI confirms the full build.

via markus.

--

View Junior Session [Sentry]

Use the system trust store for sqlx (tls-rustls-ring-native-roots) and enable reqwest's default-tls directly instead of sentry's native-tls feature, which pulls ureq and webpki-root-certs into Cargo.lock even though they are never built.

Co-Authored-By: Markus Unterwaditzer <markus@sentry.io>
@linear-code

linear-code Bot commented Oct 22, 2026

Copy link
Copy Markdown

STREAM-1941

Comment thread Cargo.toml
@untitaker
untitaker marked this pull request as ready for review October 22, 2026 15:04
@untitaker
untitaker requested a review from a team as a code owner October 22, 2026 15:04
@untitaker
untitaker merged commit 1f220ea into main Oct 22, 2026
35 checks passed
@untitaker
untitaker deleted the build/drop-vendored-webpki-roots branch October 22, 2026 15:20
untitaker added a commit to getsentry/streams that referenced this pull request Oct 22, 2026
…ntry_streams (#401)

Follow-up to [INC-2600](https://firetower.getsentry.net/INC-2600): trims
what `sentry_streams` carries, and so what consumers of the wheel
inherit, when CA bundles need updating.

Refs STREAM-1941

Companion to getsentry/taskbroker#829, which makes the same
sentry/reqwest change in taskbroker. Rollout order: deploy
taskbroker#829 first, then this one.

The published 0.0.69 manylinux wheel does not compile in a root bundle.
There are no `webpki-roots`/`webpki-root-certs` crates and no CA certs
in `rust_streams.so`. TLS goes through native-tls/OpenSSL and
`rustls-native-certs`, so it uses the system store. The bundle only
exists as a lockfile ghost, but Dependabot still bumps it (e.g. "bump
webpki-root-certs from 1.0.7 to 1.0.10").

**Rust**
- sentry: use the `reqwest` feature instead of `transport`. `transport`
turns on sentry's `native-tls` feature, which includes
`ureq?/native-tls`. Cargo then records an unused `ureq` and its
`webpki-root-certs` in `Cargo.lock`, even though neither is ever built.
Every other default sentry feature is kept.
- reqwest: move from 0.12 (defaults) to 0.13 with only `native-tls`,
`http2` and `charset`. This matches the reqwest 0.13 that sentry already
uses, so there is one reqwest instead of two, and sentry's transport
still sends over native-tls. The GCS writer only uses `Client`, headers,
`StatusCode` and `text()`, which are unchanged in 0.13.
- Removed from all three lockfiles (the main crate, the
`rust_transforms` example and `rust_test_functions`): `ureq`,
`ureq-proto`, `utf8-zero`, `der`, `pem-rfc7468`, `base64ct`,
`webpki-root-certs`, `reqwest` 0.12, `system-configuration(-sys)` and
`windows-registry`. The main lockfile also drops the `windows-*` 0.53
target crates.

**Python**
- Drop `requests` (runtime), plus `responses` and `types-requests`
(dev). Nothing in the repo imports them. `certifi` stays in the tree
because `datadog` and `sentry-sdk` depend on it, so wheel consumers
still get it. Making that bundle a no-op is an image-level fix
(`SSL_CERT_FILE`/`REQUESTS_CA_BUNDLE`), not something this package can
do.
- `uv lock` also synced the lockfile's own `sentry-streams` version from
0.0.68 to 0.0.69, matching `pyproject.toml`.

Draft until CI confirms the wheel build.

<!-- junior-request-attribution:start -->
via **markus**.
<!-- junior-request-attribution:end -->

<!-- junior-session-footer:start -->
<!-- junior-conversation-id:slack%3AD0B0XMY6PHC%3A1792675717.745119 -->

--

[View Junior
Session](https://junior-prod.sentry.dev/conversations/slack%3AD0B0XMY6PHC%3A1792675717.745119)
[[Sentry]](https://sentry.sentry.io/explore/conversations/slack%3AD0B0XMY6PHC%3A1792675717.745119/?project=4510944073809921)

<!-- junior-session-footer:end -->

---------

Co-authored-by: sentry-junior[bot] <264270552+sentry-junior[bot]@users.noreply.github.com>
Co-authored-by: Markus Unterwaditzer <markus@sentry.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants