跳到主要内容

ConfigBuilder

结构体 ConfigBuilder 

Source
pub struct ConfigBuilder<Side: ConfigSide, State> { /* private fields */ }
展开描述

A builder 用于 ServerConfigClientConfig values.

To get one of these, call ServerConfig::builder()ClientConfig::builder()

To build 一个 config, you must make at least two decisions (in order):

  • How should this client or server verify certificates provided by its peer?
  • What certificates should this client or server present to its peer?

For settings besides these, see the fields of ServerConfigClientConfig

此 usual choice 用于 protocol primitives is 到 call ClientConfig::builder/ServerConfig::builder which will use rustls’ default cryptographic provider 并 safe defaults 用于 ciphersuites 并 supported protocol versions.

use rustls::{ClientConfig, ServerConfig};
ClientConfig::builder()
//  ...

ServerConfig::builder()
//  ...

You may also override the choice of protocol versions:

ServerConfig::builder_with_protocol_versions(&[&rustls::version::TLS13])
//  ...

Overriding the default cryptographic provider introduces a Result that must be unwrapped, because the config builder checks for consistency of the choices made. For instance, it’s an error to configure only TLS 1.2 cipher suites while specifying that TLS 1.3 should be the only supported protocol version.

If you configure a smaller set of protocol primitives than the default, you may get a smaller binary, since the code for the unused ones can be optimized away at link time.

After choosing protocol primitives, you must choose (a) how to verify certificates and (b) what certificates (if any) to send to the peer. 此 methods to do this are specific to whether you’re building a ClientConfig or a ServerConfig, as tracked by the ConfigSide type parameter on the various impls of ConfigBuilder.

§ClientConfig certificate configuration

For a client, certificate verification must be configured either by calling one of:

Next, certificate sending (also known as “client authentication”, “mutual TLS”, or “mTLS”) must be configured or disabled using one of:

For example:

ClientConfig::builder()
    .with_root_certificates(root_certs)
    .with_no_client_auth();

§ServerConfig certificate configuration

For a server, certificate verification must be configured by calling one of:

Next, certificate sending must be configured by calling one of:

For example:

ServerConfig::builder()
    .with_no_client_auth()
    .with_single_cert(certs, private_key)
    .expect("bad certificate/key");

§Types

ConfigBuilder uses the typestate pattern to ensure at compile time that each required configuration item is provided exactly once. This is tracked in the State type parameter, which can have these values:

此 other type parameter is Side, which is either ServerConfig or ClientConfig depending on whether the ConfigBuilder was built with ServerConfig::builder() or ClientConfig::builder()

You won’t need to write out either of these type parameters explicitly. If you write a correct chain of configuration calls they will be used automatically. If you write an incorrect chain of configuration calls you will get an error message 从 the compiler mentioning some of these types.

Additionally, ServerConfig and ClientConfig carry a private field containing a CryptoProvider, 从 ClientConfig::builder_with_provider() or ServerConfig::builder_with_provider()。 This determines which cryptographic backend is used. 此 default is the process-default provider

实现§

Source§

impl<Side: ConfigSide, State> ConfigBuilder<Side, State>

Source

pub fn crypto_provider(&self) -> &Arc<CryptoProvider>

返回用于构造此 builder 的密码提供者。

Source§

impl<S: ConfigSide> ConfigBuilder<S, WantsVersions>

Source

pub fn with_safe_default_protocol_versions( self, ) -> Result<ConfigBuilder<S, WantsVerifier>, Error>

接受默认的协议版本:同时启用 TLS1.2 和 TLS 1.3。

Source

pub fn with_protocol_versions( self, versions: &[&'static SupportedProtocolVersion], ) -> Result<ConfigBuilder<S, WantsVerifier>, Error>

使用特定的协议版本集合。

Source§

impl ConfigBuilder<ClientConfig, WantsVersions>

Source

pub fn with_ech( self, mode: EchMode, ) -> Result<ConfigBuilder<ClientConfig, WantsVerifier>, Error>

启用 Encrypted Client Hello (ECH) in the given mode.

This implicitly selects TLS 1.3 as the only supported protocol version 到 meet the requirement 到 support ECH.

ClientConfig that , produced by this builder , specific 到 the provided crate::client::EchConfig 并 may not be appropriate 用于 all connections made by the program. In this case the configuration should only be shared by connections intended 用于 domains that offer the provided crate::client::EchConfig in their DNS zone.

Source§

impl ConfigBuilder<ClientConfig, WantsVerifier>

Source

pub fn with_root_certificates( self, root_store: impl Into<Arc<RootCertStore>>, ) -> ConfigBuilder<ClientConfig, WantsClientCert>

选择如何验证服务器证书。

使用此函数不会配置吊销。 If you wish 到 configure revocation, instead use:

- .with_root_certificates(root_store)
+ .with_webpki_verifier(
+   WebPkiServerVerifier::builder_with_provider(root_store, crypto_provider)
+   .with_crls(...)
+   .build()?
+ )
Source

pub fn with_webpki_verifier( self, verifier: Arc<WebPkiServerVerifier>, ) -> ConfigBuilder<ClientConfig, WantsClientCert>

使用 webpki 验证器选择如何验证服务器证书。

,请参见webpki::WebPkiServerVerifier::builderwebpki::WebPkiServerVerifier::builder_with_provider 以获取更多信息。

Source

pub fn dangerous(self) -> DangerousClientConfigBuilder

访问配置选项,其使用危险且需要 extra care.

Source§

impl ConfigBuilder<ClientConfig, WantsClientCert>

Source

pub fn with_client_auth_cert( self, cert_chain: Vec<CertificateDer<'static>>, key_der: PrivateKeyDer<'static>, ) -> Result<ClientConfig, Error>

Sets 一个 single certificate chain 并 matching 私钥 用于 use in client authentication.

cert_chain 是 vector of DER-encoded 证书 key_der 是 DER-encoded 私钥 as PKCS#1, PKCS#8, 或 SEC1. 此 aws-lc-rsring CryptoProviders support all three encodings, but other CryptoProviders may not.

This function fails if key_der is invalid.

Source

pub fn with_no_client_auth(self) -> ClientConfig

不支持客户端身份验证。

Source

pub fn with_client_cert_resolver( self, client_auth_cert_resolver: Arc<dyn ResolvesClientCert>, ) -> ClientConfig

设置一个自定义 ResolvesClientCert

Source§

impl ConfigBuilder<ServerConfig, WantsVerifier>

Source

pub fn with_client_cert_verifier( self, client_cert_verifier: Arc<dyn ClientCertVerifier>, ) -> ConfigBuilder<ServerConfig, WantsServerCert>

选择如何验证客户端证书。

Source

pub fn with_no_client_auth(self) -> ConfigBuilder<ServerConfig, WantsServerCert>

禁用客户端身份验证。

Source§

impl ConfigBuilder<ServerConfig, WantsServerCert>

Source

pub fn with_single_cert( self, cert_chain: Vec<CertificateDer<'static>>, key_der: PrivateKeyDer<'static>, ) -> Result<ServerConfig, Error>

Sets 一个 single certificate chain 并 matching 私钥. This certificate 并 key is 用 用于 all subsequent connections, irrespective of things like SNI hostname.

Note that the end-entity certificate must have the Subject Alternative Name extension 到 describe, e.g., the valid DNS name. 此 commonName field is disregarded.

cert_chain 是 vector of DER-encoded 证书 key_der 是 DER-encoded 私钥 as PKCS#1, PKCS#8, 或 SEC1. 此 aws-lc-rsring CryptoProviders support all three encodings, but other CryptoProviders may not.

This function fails if key_der is invalid, 或 if the SubjectPublicKeyInfo 从 the 私钥 does not match the public key 用于 the end-entity certificate 从 the cert_chain

Source

pub fn with_single_cert_with_ocsp( self, cert_chain: Vec<CertificateDer<'static>>, key_der: PrivateKeyDer<'static>, ocsp: Vec<u8>, ) -> Result<ServerConfig, Error>

Sets 一个 single certificate chain, matching 私钥 并 optional OCSP response. This certificate 并 key is 用 用于 all subsequent connections, irrespective of things like SNI hostname.

cert_chain 是 vector of DER-encoded 证书 key_der 是 DER-encoded 私钥 as PKCS#1, PKCS#8, 或 SEC1. 此 aws-lc-rsring CryptoProviders support all three encodings, but other CryptoProviders may not. ocsp 是 DER-encoded OCSP response. Ignored if zero length.

This function fails if key_der is invalid, 或 if the SubjectPublicKeyInfo 从 the 私钥 does not match the public key 用于 the end-entity certificate 从 the cert_chain

Source

pub fn with_cert_resolver( self, cert_resolver: Arc<dyn ResolvesServerCert>, ) -> ServerConfig

设置一个自定义 ResolvesServerCert

Trait 实现§

Source§

impl<Side: Clone + ConfigSide, State: Clone> Clone for ConfigBuilder<Side, State>

Source§

fn clone(&self) -> ConfigBuilder<Side, State>

返回值的副本。 更多信息
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment 从 source. 更多信息
Source§

impl<Side: ConfigSide, State: Debug> Debug for ConfigBuilder<Side, State>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

使用给定的格式化器格式化此值。 更多信息

自动 Trait 实现§

§

impl<Side, State> Freeze for ConfigBuilder<Side, State>
where State: Freeze,

§

impl<Side, State> !RefUnwindSafe for ConfigBuilder<Side, State>

§

impl<Side, State> Send for ConfigBuilder<Side, State>
where State: Send, Side: Send,

§

impl<Side, State> Sync for ConfigBuilder<Side, State>
where State: Sync, Side: Sync,

§

impl<Side, State> Unpin for ConfigBuilder<Side, State>
where State: Unpin, Side: Unpin,

§

impl<Side, State> UnsafeUnpin for ConfigBuilder<Side, State>
where State: UnsafeUnpin,

§

impl<Side, State> !UnwindSafe for ConfigBuilder<Side, State>

Blanket 实现§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. 更多信息
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows 从 an owned value. 更多信息
Source§

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

Source§

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

Mutably borrows 从 an owned value. 更多信息
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment 从 selfdest. 更多信息
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

原样返回传入的参数。

Source§

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

Source§

fn into(self) -> U

Calls U::从(self)

That is, this conversion is whatever the implementation of From<T> 用于 U 的实现方式。

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

获得所有权后的类型。
Source§

fn to_owned(&self) -> T

Creates owned data 从 borrowed data, usually by cloning. 更多信息
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data 到 replace owned data, usually by cloning. 更多信息
Source§

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

Source§

type Error = Infallible

转换出错时返回的类型。
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

执行转换。
Source§

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

Source§

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

转换出错时返回的类型。
Source§

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

执行转换。