pub struct ReloadableResolver { /* private fields */ }Available on crate feature
tls only.Expand description
A ResolvesServerCert whose backing rustls::sign::CertifiedKey can be
swapped at runtime via ReloadableResolver::reload_from_pem.
Backed by arc_swap::ArcSwap, the swap is atomic and lock-free on the
hot path (one Arc clone per TLS handshake). Use it via
TlsCert::resolver and keep the returned Arc so callers can trigger
reloads from anywhere (file watcher, signal handler, admin endpoint, …).
§Example
use std::sync::Arc;
use tako_rs_server::{ReloadableResolver, Server, TlsCert};
let resolver = Arc::new(ReloadableResolver::from_pem("cert.pem", "key.pem")?);
let cert = TlsCert::resolver(resolver.clone());
let server = Server::builder().tls(cert).build();
// Later, after a cert rotation:
resolver.reload_from_pem("cert.pem", "key.pem")?;Implementations§
Source§impl ReloadableResolver
impl ReloadableResolver
Sourcepub fn from_pem(cert_path: &str, key_path: &str) -> Result<Self>
pub fn from_pem(cert_path: &str, key_path: &str) -> Result<Self>
Construct from on-disk PEM files.
Sourcepub fn reload_from_pem(&self, cert_path: &str, key_path: &str) -> Result<()>
pub fn reload_from_pem(&self, cert_path: &str, key_path: &str) -> Result<()>
Atomically swap to a new cert + key loaded from the given PEM files.
Hot-path TLS handshakes pick up the new cert on the next resolve call
without dropping any in-flight session.
Sourcepub fn reload(&self, ck: CertifiedKey)
pub fn reload(&self, ck: CertifiedKey)
Atomically swap to a pre-built rustls::sign::CertifiedKey.
Trait Implementations§
Source§impl Debug for ReloadableResolver
impl Debug for ReloadableResolver
Source§impl ResolvesServerCert for ReloadableResolver
impl ResolvesServerCert for ReloadableResolver
Source§fn resolve(&self, _client_hello: ClientHello<'_>) -> Option<Arc<CertifiedKey>>
fn resolve(&self, _client_hello: ClientHello<'_>) -> Option<Arc<CertifiedKey>>
Choose a certificate chain and matching key given simplified
ClientHello information. Read more
Source§fn only_raw_public_keys(&self) -> bool
fn only_raw_public_keys(&self) -> bool
Return true when the server only supports raw public keys.
Auto Trait Implementations§
impl !Freeze for ReloadableResolver
impl !RefUnwindSafe for ReloadableResolver
impl Send for ReloadableResolver
impl Sync for ReloadableResolver
impl Unpin for ReloadableResolver
impl UnsafeUnpin for ReloadableResolver
impl !UnwindSafe for ReloadableResolver
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more