Add ACME TLS module with automatic Let's Encrypt certificate provisioning and renewal using rustls-acme 0.12. Each listener creates its own AcmeConfig with domain list, cache directory, and Let's Encrypt directory URL. The ACME state machine runs as a background tokio task per listener, and ResolvesServerCertAcme serves the provisioned certificate. Certificate failure behavior: fail to start without valid cert, continue serving if one exists. TLS-ALPN-01 is the default challenge type with acme-tls/1 ALPN registered. Cipher suites restricted to 4 TLS 1.2 + all TLS 1.3 suites. Also implements manual TLS mode with PEM file loading, SNI-based cert resolution, and shared CryptoProvider with restricted cipher suites.
38 lines
858 B
TOML
38 lines
858 B
TOML
[package]
|
|
name = "reverse-proxy"
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
license = "MIT OR Apache-2.0"
|
|
|
|
[lib]
|
|
name = "reverse_proxy"
|
|
path = "src/lib.rs"
|
|
|
|
[[bin]]
|
|
name = "reverse-proxy"
|
|
path = "src/main.rs"
|
|
|
|
[dependencies]
|
|
axum = "=0.8.9"
|
|
tokio = { version = "=1.45.1", features = ["full"] }
|
|
hyper = "=1.6.0"
|
|
tower = "=0.5.2"
|
|
rustls = { version = "=0.23.28", features = ["aws_lc_rs"] }
|
|
tokio-rustls = "=0.26.2"
|
|
rustls-acme = { version = "=0.12.1", features = ["aws-lc-rs"] }
|
|
serde = { version = "=1.0.228", features = ["derive"] }
|
|
toml = "=0.8.23"
|
|
arc-swap = "=1.7.1"
|
|
tracing = "=0.1.41"
|
|
tracing-subscriber = "=0.3.19"
|
|
rustls-pemfile = "=2.2.0"
|
|
rustls-pki-types = "=1.12.0"
|
|
clap = { version = "=4.6.1", features = ["derive"] }
|
|
signal-hook = "=0.3.18"
|
|
anyhow = "=1.0.102"
|
|
thiserror = "=2.0.18"
|
|
futures = "=0.3.31"
|
|
|
|
[dev-dependencies]
|
|
rcgen = "=0.13"
|
|
tempfile = "=3" |