This commit introduces the ability to dynamically select a TLS
configuration based on the client's TLS hello via the new `Resolver`
trait. In support of this, it also makes the following changes:
* Added `Authority::set_port()`.
* `UdsListener` is now `UnixListener`.
* `Bindable` removed in favor of new `Bind`.
* All built-in listeners now implement `Bind<&Rocket>`.
* `Connection` requires `AsyncRead + AsyncWrite`.
* The `Debug` impl for `Endpoint` displays the underlying address.
* `Listener` must be `Sized`.
* The TLS listener was moved to `tls::TlsListener`.
* The preview `quic` listener no longer implements `Listener`.
* Added `TlsConfig::server_config()`.
* Added `race` future helpers.
* Added `Rocket::launch_with()`, `Rocket::bind_launch()`.
* Added a default `client.pem` to the TLS example.
* Various unnecessary listener `Config` structures removed.
In addition, the testbench was revamped to support more scenarios. This
resulted in the following issues being found and fixed:
* Fix an issue where the logger would ignore color requests.
* Clarified docs for `mtls::Certificate` guard.
* Improved error messages on listener misconfiguration.
Resolves#2730.
Resolves#2363.
Closes#2748.
Closes#2683.
Closes#2577.
Prior to this commit, some TLS related operations used 'ring' even when
a different default 'CryptoProvider' was installed. This commit fixes
that by refactoring 'TlsConfig' such that all utility methods are
required to use the default 'CryptoProvider'.
This commit also cleans up code related to the rustls 0.23 update.
This commit updates rustls to 0.23 and adds support for custom
'CryptoProvider's installable via 'CryptoProvider::install_default()'.
In particular, this enables using `aws-lc-rs` for cryptography related
operation in TLS. The 'TLS' example was updated to test use of
'aws-lc-rs' on Unix.