taler-rust

GNU Taler code in Rust. Largely core banking integrations.
Log | Files | Refs | Submodules | README | LICENSE

commit 2592304e4994fe31aa9c0a2b60cc27d20f2ef37d
parent 9df4ad89b8a4c8acbd06b0ebce398449ba4364df
Author: Antoine A <>
Date:   Tue,  2 Jun 2026 18:18:01 +0200

common: improve TLS configuration

Diffstat:
MCargo.toml | 2+-
Mcommon/http-client/Cargo.toml | 1-
Mcommon/http-client/src/lib.rs | 8++++----
Mtaler-apns-relay/src/apns.rs | 5+++--
Mtaler-cyclos/src/bin/cyclos-codegen.rs | 2+-
Mtaler-cyclos/src/bin/cyclos-harness.rs | 4++--
Mtaler-cyclos/src/dev.rs | 2+-
Mtaler-cyclos/src/main.rs | 4++--
Mtaler-magnet-bank/src/bin/magnet-bank-harness.rs | 4++--
Mtaler-magnet-bank/src/dev.rs | 2+-
Mtaler-magnet-bank/src/main.rs | 2+-
Mtaler-magnet-bank/src/setup.rs | 2+-
12 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml @@ -52,7 +52,7 @@ owo-colors = "4.2.3" aws-lc-rs = "1.15" compact_str = { version = "0.9.0", features = ["serde", "sqlx-postgres"] } hyper-util = { version = "0.1", features = ["client-legacy", "http1", "http2"] } -hyper-rustls = { version = "0.27", features = ["http2"] } +hyper-rustls = { version = "0.27", features = ["aws-lc-rs", "http1", "http2", "rustls-platform-verifier", "tls12"], default-features = false } rand = { version = "0.10" } regex = { version = "1" } rustls = "0.23" diff --git a/common/http-client/Cargo.toml b/common/http-client/Cargo.toml @@ -21,7 +21,6 @@ tracing.workspace = true taler-common.workspace = true compact_str.workspace = true url.workspace = true -anyhow.workspace = true hyper.workspace = true tokio.workspace = true hyper-util.workspace = true diff --git a/common/http-client/src/lib.rs b/common/http-client/src/lib.rs @@ -57,14 +57,15 @@ pub enum ClientErr { ResTransport(FmtSource<hyper::Error>), } -pub fn client() -> anyhow::Result<Client> { +pub fn client() -> Client { rustls::crypto::aws_lc_rs::default_provider() .install_default() .expect("failed to install the default TLS provider"); // Prepare the TLS client config let tls = rustls::ClientConfig::builder() - .with_native_roots()? + .try_with_platform_verifier() + .expect("failed to setup platform TLS verifier") .with_no_client_auth(); // Prepare the HTTPS connector @@ -76,8 +77,7 @@ pub fn client() -> anyhow::Result<Client> { .build(); // Build the hyper client from the HTTPS connector. - let client = hyper_util::client::legacy::Client::builder(TokioExecutor::new()).build(https); - Ok(client) + hyper_util::client::legacy::Client::builder(TokioExecutor::new()).build(https) } #[derive(Debug, Clone)] diff --git a/taler-apns-relay/src/apns.rs b/taler-apns-relay/src/apns.rs @@ -25,7 +25,7 @@ use compact_str::CompactString; use http::{StatusCode, header::CONTENT_TYPE}; use http_body_util::{BodyExt, Full}; use hyper::{Method, body::Bytes, header::AUTHORIZATION}; -use hyper_rustls::ConfigBuilderExt as _; +use hyper_rustls::ConfigBuilderExt; use hyper_util::rt::{TokioExecutor, TokioTimer}; use jiff::{SignedDuration, Timestamp}; use rustls_pki_types::{PrivateKeyDer, pem::PemObject}; @@ -211,7 +211,8 @@ impl Client { // Prepare the TLS client config let tls = rustls::ClientConfig::builder() - .with_native_roots()? + .try_with_platform_verifier() + .expect("failed to setup platform TLS verifier") .with_no_client_auth(); // Prepare the HTTPS connector diff --git a/taler-cyclos/src/bin/cyclos-codegen.rs b/taler-cyclos/src/bin/cyclos-codegen.rs @@ -39,7 +39,7 @@ enum Kind { #[tokio::main] async fn main() -> anyhow::Result<()> { let args = Args::parse(); - let client = http_client::client()?; + let client = http_client::client(); let api: serde_json::Value = Req::new( &client, Method::GET, diff --git a/taler-cyclos/src/bin/cyclos-harness.rs b/taler-cyclos/src/bin/cyclos-harness.rs @@ -316,7 +316,7 @@ async fn logic_harness(cfg: &Config, reset: bool) -> anyhow::Result<()> { step("Prepare db"); let pool = dbinit(cfg, reset).await?; - let client = http_client::client()?; + let client = http_client::client(); setup::setup(cfg, reset, &client).await?; let cfg = HarnessCfg::parse(cfg)?; let wire = Client { @@ -533,7 +533,7 @@ async fn online_harness(config: &Config, reset: bool) -> anyhow::Result<()> { step("Prepare db"); let pool = dbinit(config, reset).await?; - let http_client = http_client::client()?; + let http_client = http_client::client(); setup::setup(config, reset, &http_client).await?; let cfg = HarnessCfg::parse(config)?; let wire = Client { diff --git a/taler-cyclos/src/dev.rs b/taler-cyclos/src/dev.rs @@ -43,7 +43,7 @@ pub enum DevCmd { } pub async fn dev(cfg: &Config, cmd: DevCmd) -> anyhow::Result<()> { - let client = http_client::client()?; + let client = http_client::client(); let cfg = HarnessCfg::parse(cfg)?; let wire = Client { client: &client, diff --git a/taler-cyclos/src/main.rs b/taler-cyclos/src/main.rs @@ -89,7 +89,7 @@ async fn run(cmd: Command, cfg: &Config) -> anyhow::Result<()> { dbinit(cfg, reset).await?; } Command::Setup { reset } => { - let client = http_client::client()?; + let client = http_client::client(); setup::setup(cfg, reset, &client).await? } Command::Serve { check } => { @@ -105,7 +105,7 @@ async fn run(cmd: Command, cfg: &Config) -> anyhow::Result<()> { } Command::Worker { transient } => { let pool = pool(cfg).await?; - let client = http_client::client()?; + let client = http_client::client(); run_worker(cfg, &pool, &client, transient).await?; } Command::Config(cmd) => cmd.run(cfg)?, diff --git a/taler-magnet-bank/src/bin/magnet-bank-harness.rs b/taler-magnet-bank/src/bin/magnet-bank-harness.rs @@ -336,7 +336,7 @@ async fn logic_harness(cfg: &Config, reset: bool) -> anyhow::Result<()> { let cfg = HarnessCfg::parse(cfg)?; let keys = setup::load(&cfg.worker)?; - let client = http_client::client()?; + let client = http_client::client(); let harness = Harness::new(&cfg, &client, &pool, &keys).await; @@ -523,7 +523,7 @@ async fn online_harness(config: &Config, reset: bool) -> anyhow::Result<()> { let cfg = HarnessCfg::parse(config)?; let keys = setup::load(&cfg.worker)?; - let client = http_client::client()?; + let client = http_client::client(); let harness = Harness::new(&cfg, &client, &pool, &keys).await; diff --git a/taler-magnet-bank/src/dev.rs b/taler-magnet-bank/src/dev.rs @@ -67,7 +67,7 @@ pub enum DevCmd { pub async fn dev(cfg: &Config, cmd: DevCmd) -> anyhow::Result<()> { let cfg = WorkerCfg::parse(cfg)?; let keys = setup::load(&cfg)?; - let client = http_client::client()?; + let client = http_client::client(); let client = AuthClient::new(&client, &cfg.api_url, &cfg.consumer).upgrade(&keys.access_token); match cmd { DevCmd::Accounts => { diff --git a/taler-magnet-bank/src/main.rs b/taler-magnet-bank/src/main.rs @@ -105,7 +105,7 @@ async fn run(cmd: Command, cfg: &Config) -> anyhow::Result<()> { } Command::Worker { transient } => { let pool = pool(cfg).await?; - let client = http_client::client()?; + let client = http_client::client(); run_worker(cfg, &pool, &client, transient).await?; } Command::Config(cmd) => cmd.run(cfg)?, diff --git a/taler-magnet-bank/src/setup.rs b/taler-magnet-bank/src/setup.rs @@ -84,7 +84,7 @@ pub async fn setup(cfg: WorkerCfg, reset: bool) -> anyhow::Result<()> { Err(e) if e.kind() == ErrorKind::NotFound => KeysFile::default(), Err(e) => Err(e)?, }; - let client = http_client::client()?; + let client = http_client::client(); let client = AuthClient::new(&client, &cfg.api_url, &cfg.consumer); info!("Setup OAuth access token");