Skip to content

Add support for rustls-platform-verifier #2159

Closed

Description

@djc

We recently released the rustls-platform-verifier crate, and the rustls team believes this is probably the best option for most client use cases (especially on platforms like Windows, macOS, iOS and Android), since it reuses the platform verifier instead of more naively trying to find installed roots (which might be subject to additional constraints when used in the platform verifier).

This has been used for years inside the 1Password multi-platform client codebase, so it is more mature than it might seem at first glance.

I actually started adding support for this, but unfortunately it doesn't currently have great support for adding additional roots on some platforms, so the current form of feature additivity that reqwest uses (adding both webpki-roots and rustls-native-certs) doesn't work on some platforms (it only works on Linux, where it is needed the most because there is no real platform verifier).

I think this should probably become the default going forward.

Activity

  1. djc commented on Apr 25, 2024

    @djc
    ContributorAuthor

    @seanmonstar any feedback?

  2. seanmonstar commented on Apr 26, 2024

    @seanmonstar
    Owner

    Seems like a good goal. You mentioned that it can't currently support the feature additivity that reqwest exposes. Will it at some point? Or is that a non-goal?

  3. cpu commented on Apr 26, 2024

    @cpu
    Contributor

    Will it at some point? Or is that a non-goal?

    There's an existing issue upstream for the missing feature: rustls/rustls-platform-verifier#58 I think we're all in favour, it just hasn't been implemented. IMO knowing it's a blocker for reqwest would help motivate getting around to it 👍

  4. djc commented on Apr 26, 2024

    @djc
    ContributorAuthor

    Not sure it should be a blocker for reqwest -- but yes, we do want to support it eventually. While it is opt-in for reqwest, I don't think it needs to be a blocker?

  5. seanmonstar commented on Oct 13, 2024

    @seanmonstar
    Owner

    Just to ease finding the status, as commented in #2286: it's blocked on being an additive feature.

  6. djc commented on Oct 13, 2024

    @djc
    ContributorAuthor

    (I think the work to enable that is pretty much done upstream, just needs a release.)

  7. ofek commented on Oct 13, 2024

    @ofek

    Is this the proper way to use the library until there is an official feature? The documentation mentions that applications should call the install default method early in main but I can't find examples on applications doing so. I can only find an example from rustup doing it manually.

  8. djc commented on Oct 14, 2024

    @djc
    ContributorAuthor

    Is this the proper way to use the library until there is an official feature? The documentation mentions that applications should call the install default method early in main but I can't find examples on applications doing so. I can only find an example from rustup doing it manually.

    Yup, that looks fine.

  9. ofek commented on Oct 14, 2024

    @ofek

    Great, thanks! Is there an example of setting it globally at the start of an application so one does not have to create a client manually?

  10. djc commented on Oct 15, 2024

    @djc
    ContributorAuthor

    Great, thanks! Is there an example of setting it globally at the start of an application so one does not have to create a client manually?

    That's not a thing for the ServerCertVerifier, only for the CryptoProvider, see rustls/rustls#1821.

  11. alexander-potemkin commented on Aug 14, 2025

    @alexander-potemkin

    Bumping this up, that feels important; it's also the blocker for Element to support TLS 1.3, which is important, given the security focus of Element on itself.

  12. csett86 commented on Dec 31, 2025

    @csett86

    I think this is now also closed via #2891 and released in v0.13.0. Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions