Skip to main content

TlsClientConfig

Struct TlsClientConfig 

Source
pub struct TlsClientConfig { /* private fields */ }
Expand description

TLS Client Configuration

Implementations§

Source§

impl TlsClientConfig

Source

pub fn new<S: Into<String>>(server_name: S) -> Self

Create a new TLS client configuration

Source

pub fn with_tls_versions(self, versions: Vec<TlsVersion>) -> Self

Set allowed TLS protocol versions

Only the listed versions are enabled. An empty list is rejected when the config is loaded.

Source

pub fn with_cipher_suites( self, cipher_suites: Vec<SupportedCipherSuite>, ) -> Self

Set allowed cipher suites

Only the listed suites are enabled, matched by suite identifier and kept in this crate’s preference order. Loading the config fails if none of them is supported, or if none of them can be used with the enabled TLS versions.

Source

pub fn with_root_ca<S: Into<String>>(self, ca_path: S) -> Self

Trust the CA certificates in ca_path (PEM) instead of the system roots

Use this for servers with certificates from a private CA. Only the given CAs are trusted; the system root store is not loaded. Hostname and chain validation still apply, and a pin set with with_pinned_cert_hash() is checked on top.

Cannot be combined with insecure(), which skips CA validation: load_client_config() returns an error for that combination.

Source

pub fn with_client_certificate<S: Into<String>>( self, cert_path: S, key_path: S, ) -> Self

Configure client authentication for mTLS

Source

pub fn insecure(self) -> Self

Allow insecure connections (skip certificate verification)

§WARNING: Security Risk

This mode skips certificate validation (no CA chain or hostname checks), so any certificate is accepted unless one is pinned with with_pinned_cert_hash(). The server must still prove that it holds the private key for the certificate it presents: the handshake signature is always verified. This mode should ONLY be used for:

  • Development and testing
  • Debugging environments
  • Internal networks with certificate pinning enabled

NEVER use this in production without explicit certificate pinning via with_pinned_cert_hash(). For a server with a private CA, trust that CA with with_root_ca() instead.

Source

pub fn with_pinned_cert_hash(self, hash: Vec<u8>) -> Self

Pin a certificate by its SHA-256 hash/fingerprint

Only a server presenting the certificate with exactly this hash is accepted. Compute the hash with TlsServerConfig::calculate_cert_hash(): it is the 32-byte SHA-256 digest of the DER certificate, as raw bytes (not hex).

Without insecure() the pin is checked in addition to normal CA and hostname validation. With insecure() it replaces them, for development setups with a self-signed certificate. Either way the handshake signature is verified against the pinned certificate’s public key, so a server that has the certificate but not its private key is rejected.

A hash that is not 32 bytes long can never match, so load_client_config() returns an error for it.

Source

pub fn load_client_config(&self) -> Result<ClientConfig>

Load the TLS client configuration

§Errors

Returns ProtocolError::TlsError if a pinned hash is not 32 bytes, if with_root_ca() is combined with insecure(), if a certificate or key file cannot be read or parsed, or if the version or cipher-suite settings leave nothing usable.

Source

pub fn server_name(&self) -> Result<ServerName<'_>>

Get the server name as a rustls::ServerName

Source

pub fn server_name_string(&self) -> String

Get the server name as an owned String

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more