[package]
name = "certmagic"
version = "0.2.0"
edition = "2024"
license = "Apache-2.0"
repository = "https://github.com/houseme/certmagic"
homepage = "https://github.com/houseme/certmagic"
documentation = "https://docs.rs/certmagic"
description = "Automatic TLS certificate acquisition, renewal, and maintenance for Rust servers"
keywords = ["tls", "acme", "letsencrypt", "https", "certificate"]
categories = ["network-programming", "cryptography", "asynchronous"]
exclude = ["docs/", ".github/"]
[package.metadata.docs.rs]
all-features = true
targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
tokio = { version = "1.53.2", features = ["rt-multi-thread", "macros", "net", "time", "sync", "fs", "io-util", "signal"] }
tokio-util = { version = "0.7.20", features = ["rt"] }
futures = "0.3.34"
rustls = { version = "0.23.45", default-features = false, features = ["std", "tls12"] }
tokio-rustls = { version = "0.26.6", default-features = false, features = ["tls12"] }
rustls-pki-types = "1.15.1"
rcgen = { version = "0.14.10", default-features = false, features = ["crypto", "pem"] }
x509-parser = "0.18.1"
ring = { version = "0.17.14", optional = true }
aws-lc-rs = { version = "1.18.1", optional = true }
p521 = { version = "0.14.0", features = ["ecdsa"] }
rsa = { version = "0.10.0-rc.19", optional = true, features = ["sha2", "getrandom"] }
reqwest = { version = "0.13.5", default-features = false, features = ["form", "http2", "json"] }
serde = { version = "1.0.229", features = ["derive"] }
serde_json = "1.0.152"
thiserror = "2.0.21"
tracing = "0.1.44"
async-trait = "0.1.92"
base64 = "0.23.1"
rand = "0.10.3"
sha1 = "0.11.0"
sha2 = "0.11.0"
hex = "0.4.3"
time = { version = "0.3.55", features = ["formatting", "parsing", "serde", "std"] }
idna = "1.1.0"
url = "2.5.8"
hickory-resolver = { version = "0.26.3", optional = true }
redis = { version = "1.7.1", optional = true, default-features = false, features = ["tokio-rustls-comp", "tls-rustls-webpki-roots", "connection-manager"] }
etcd-client = { version = "0.21.0", optional = true, default-features = false, features = ["tls-webpki-roots"] }
aws-sdk-s3 = { version = "1.152.0", optional = true, default-features = false, features = ["rt-tokio"] }
aws-sdk-secretsmanager = { version = "1.120.0", optional = true, default-features = false, features = ["rt-tokio"] }
aws-smithy-http-client = { version = "1.5.0", optional = true, default-features = false, features = ["rt-tokio"] }
[dev-dependencies]
tempfile = "3.27.0"
tokio = { version = "1.53.2", features = ["test-util"] }
[features]
default = [
"aws-lc-rs",
"zerossl",
"file-storage",
"http-01",
"dns-01",
"ocsp",
]
ring = [
"dep:ring",
"aws-smithy-http-client?/rustls-ring",
"etcd-client?/tls-ring",
"rustls/ring",
"tokio-rustls/ring",
"rcgen/ring",
"reqwest/rustls-no-provider",
"x509-parser/verify",
]
aws-lc-rs = [
"dep:aws-lc-rs",
"aws-smithy-http-client?/rustls-aws-lc",
"etcd-client?/tls-aws-lc",
"rustls/aws_lc_rs",
"tokio-rustls/aws_lc_rs",
"rcgen/aws_lc_rs",
"reqwest/rustls",
"x509-parser/verify-aws",
]
rsa = ["dep:rsa", "aws-lc-rs", "rcgen/aws_lc_rs"]
file-storage = []
redis-storage = ["dep:redis"]
etcd-storage = ["dep:etcd-client"]
remote-cert-store = []
s3-cert-store = ["remote-cert-store", "dep:aws-sdk-s3", "dep:aws-smithy-http-client"]
vault-cert-store = ["remote-cert-store"]
secrets-manager-cert-store = ["remote-cert-store", "dep:aws-sdk-secretsmanager", "dep:aws-smithy-http-client"]
http-01 = []
dns-01 = ["dep:hickory-resolver"]
ocsp = []
zerossl = []
local-cache = []
integration-tests = []
[profile.dev]
opt-level = 0
debug = 1
[profile.release]
lto = "thin"
codegen-units = 1
strip = "debuginfo"
[lints.rust]
unsafe_code = "forbid"
missing_debug_implementations = "warn"
[lints.clippy]
all = "warn"
dbg_macro = "warn"
[[bench]]
name = "cache_paths"
harness = false
required-features = ["local-cache"]
[[example]]
name = "redis_storage"
required-features = ["redis-storage"]
[[example]]
name = "etcd_storage"
required-features = ["etcd-storage"]
[[example]]
name = "s3_cert_store"
required-features = ["s3-cert-store", "etcd-storage"]
[[example]]
name = "vault_cert_store"
required-features = ["vault-cert-store", "etcd-storage"]
[[example]]
name = "secrets_manager_cert_store"
required-features = ["secrets-manager-cert-store", "etcd-storage"]
[[bench]]
name = "remote_cert_store"
harness = false
required-features = ["remote-cert-store"]