feat: add two new features to allow using webpki-roots or rustls-native-certs

pull/93/head
Yusuf Bera Ertan 3 years ago committed by Sebastian Dröge
parent 09ba02ef15
commit e89b49c16d
  1. 7
      Cargo.toml
  2. 10
      README.md
  3. 13
      src/lib.rs
  4. 62
      src/tokio.rs
  5. 6
      src/tokio/rustls.rs

@ -20,7 +20,8 @@ gio-runtime = ["gio", "glib"]
async-tls = ["real-async-tls"] async-tls = ["real-async-tls"]
async-native-tls = ["async-std-runtime", "real-async-native-tls", "tungstenite/native-tls"] async-native-tls = ["async-std-runtime", "real-async-native-tls", "tungstenite/native-tls"]
tokio-native-tls = ["tokio-runtime", "real-tokio-native-tls", "real-native-tls", "tungstenite/native-tls"] tokio-native-tls = ["tokio-runtime", "real-tokio-native-tls", "real-native-tls", "tungstenite/native-tls"]
tokio-rustls = ["tokio-runtime", "real-tokio-rustls", "webpki-roots", "tungstenite/rustls-tls"] tokio-rustls-webpki-roots = ["tokio-runtime", "real-tokio-rustls", "webpki-roots", "tungstenite/rustls-tls"]
tokio-rustls-native-certs = ["tokio-runtime", "real-tokio-rustls", "rustls-native-certs", "tungstenite/rustls-tls"]
tokio-openssl = ["tokio-runtime", "real-tokio-openssl", "openssl"] tokio-openssl = ["tokio-runtime", "real-tokio-openssl", "openssl"]
[package.metadata.docs.rs] [package.metadata.docs.rs]
@ -79,6 +80,10 @@ optional = true
version = "^0.22" version = "^0.22"
package = "tokio-rustls" package = "tokio-rustls"
[dependencies.rustls-native-certs]
optional = true
version = "0.5"
[dependencies.webpki-roots] [dependencies.webpki-roots]
optional = true optional = true
version = "0.21" version = "0.21"

@ -43,8 +43,14 @@ integration with various other crates can be enabled via feature flags
with the [tokio](https://tokio.rs) runtime. with the [tokio](https://tokio.rs) runtime.
* `tokio-native-tls`: Enables the additional functions in the `tokio` module to * `tokio-native-tls`: Enables the additional functions in the `tokio` module to
implement TLS via [tokio-native-tls](https://crates.io/crates/tokio-native-tls). implement TLS via [tokio-native-tls](https://crates.io/crates/tokio-native-tls).
* `tokio-rustls`: Enables the additional functions in the `tokio` module to * `tokio-rustls-native-certs`: Enables the additional functions in the `tokio`
implement TLS via [tokio-rustls](https://crates.io/crates/tokio-rustls). module to implement TLS via [tokio-rustls](https://crates.io/crates/tokio-rustls)
and uses native system certificates found with
[rustls-native-certs](https://github.com/rustls/rustls-native-certs).
* `tokio-rustls-webpki-roots`: Enables the additional functions in the `tokio`
module to implement TLS via [tokio-rustls](https://crates.io/crates/tokio-rustls)
and uses the certificates [webpki-roots](https://github.com/rustls/webpki-roots)
provides.
* `gio-runtime`: Enables the `gio` module, which provides integration with * `gio-runtime`: Enables the `gio` module, which provides integration with
the [gio](https://gtk-rs.org) runtime. the [gio](https://gtk-rs.org) runtime.

@ -18,8 +18,14 @@
//! with the [tokio](https://tokio.rs) runtime. //! with the [tokio](https://tokio.rs) runtime.
//! * `tokio-native-tls`: Enables the additional functions in the `tokio` module to //! * `tokio-native-tls`: Enables the additional functions in the `tokio` module to
//! implement TLS via [tokio-native-tls](https://crates.io/crates/tokio-native-tls). //! implement TLS via [tokio-native-tls](https://crates.io/crates/tokio-native-tls).
//! * `tokio-rustls`: Enables the additional functions in the `tokio` module to //! * `tokio-rustls-native-certs`: Enables the additional functions in the `tokio`
//! implement TLS via [tokio-rustls](https://crates.io/crates/tokio-rustls). //! module to implement TLS via [tokio-rustls](https://crates.io/crates/tokio-rustls)
//! and uses native system certificates found with
//! [rustls-native-certs](https://github.com/rustls/rustls-native-certs).
//! * `tokio-rustls-webpki-roots`: Enables the additional functions in the `tokio`
//! module to implement TLS via [tokio-rustls](https://crates.io/crates/tokio-rustls)
//! and uses the certificates [webpki-roots](https://github.com/rustls/webpki-roots)
//! provides.
//! * `tokio-openssl`: Enables the additional functions in the `tokio` module to //! * `tokio-openssl`: Enables the additional functions in the `tokio` module to
//! implement TLS via [tokio-openssl](https://crates.io/crates/tokio-openssl). //! implement TLS via [tokio-openssl](https://crates.io/crates/tokio-openssl).
//! * `gio-runtime`: Enables the `gio` module, which provides integration with //! * `gio-runtime`: Enables the `gio` module, which provides integration with
@ -45,7 +51,8 @@ mod handshake;
feature = "async-tls", feature = "async-tls",
feature = "async-native-tls", feature = "async-native-tls",
feature = "tokio-native-tls", feature = "tokio-native-tls",
feature = "tokio-rustls", feature = "tokio-rustls-native-certs",
feature = "tokio-rustls-webpki-roots",
feature = "tokio-openssl", feature = "tokio-openssl",
))] ))]
pub mod stream; pub mod stream;

@ -15,13 +15,23 @@ use futures_io::{AsyncRead, AsyncWrite};
#[path = "tokio/native_tls.rs"] #[path = "tokio/native_tls.rs"]
mod tls; mod tls;
#[cfg(all(feature = "tokio-rustls", not(feature = "tokio-native-tls")))] #[cfg(all(
any(
feature = "tokio-rustls-native-certs",
feature = "tokio-rustls-webpki-roots"
),
not(feature = "tokio-native-tls")
))]
#[path = "tokio/rustls.rs"] #[path = "tokio/rustls.rs"]
mod tls; mod tls;
#[cfg(all( #[cfg(all(
feature = "tokio-openssl", feature = "tokio-openssl",
not(any(feature = "tokio-native-tls", feature = "tokio-rustls")) not(any(
feature = "tokio-native-tls",
feature = "tokio-rustls-native-certs",
feature = "tokio-rustls-webpki-roots"
))
))] ))]
#[path = "tokio/openssl.rs"] #[path = "tokio/openssl.rs"]
mod tls; mod tls;
@ -30,7 +40,8 @@ mod tls;
feature = "async-tls", feature = "async-tls",
not(any( not(any(
feature = "tokio-native-tls", feature = "tokio-native-tls",
feature = "tokio-rustls", feature = "tokio-rustls-native-certs",
feature = "tokio-rustls-webpki-roots",
feature = "tokio-openssl" feature = "tokio-openssl"
)) ))
))] ))]
@ -39,7 +50,8 @@ mod tls;
#[cfg(not(any( #[cfg(not(any(
feature = "tokio-native-tls", feature = "tokio-native-tls",
feature = "tokio-rustls", feature = "tokio-rustls-native-certs",
feature = "tokio-rustls-webpki-roots",
feature = "tokio-openssl", feature = "tokio-openssl",
feature = "async-tls" feature = "async-tls"
)))] )))]
@ -48,14 +60,16 @@ mod tls;
#[cfg(any( #[cfg(any(
feature = "tokio-native-tls", feature = "tokio-native-tls",
feature = "tokio-rustls", feature = "tokio-rustls-native-certs",
feature = "tokio-rustls-webpki-roots",
feature = "tokio-openssl", feature = "tokio-openssl",
feature = "async-tls", feature = "async-tls",
))] ))]
pub use self::tls::client_async_tls_with_connector_and_config; pub use self::tls::client_async_tls_with_connector_and_config;
#[cfg(any( #[cfg(any(
feature = "tokio-native-tls", feature = "tokio-native-tls",
feature = "tokio-rustls", feature = "tokio-rustls-native-certs",
feature = "tokio-rustls-webpki-roots",
feature = "tokio-openssl", feature = "tokio-openssl",
feature = "async-tls" feature = "async-tls"
))] ))]
@ -63,7 +77,8 @@ use self::tls::{AutoStream, Connector};
#[cfg(not(any( #[cfg(not(any(
feature = "tokio-native-tls", feature = "tokio-native-tls",
feature = "tokio-rustls", feature = "tokio-rustls-native-certs",
feature = "tokio-rustls-webpki-roots",
feature = "tokio-openssl", feature = "tokio-openssl",
feature = "async-tls" feature = "async-tls"
)))] )))]
@ -171,7 +186,8 @@ pub type ClientStream<S> = AutoStream<S>;
#[cfg(any( #[cfg(any(
feature = "tokio-native-tls", feature = "tokio-native-tls",
feature = "tokio-rustls", feature = "tokio-rustls-native-certs",
feature = "tokio-rustls-webpki-roots",
all(feature = "async-tls", not(feature = "tokio-openssl")) all(feature = "async-tls", not(feature = "tokio-openssl"))
))] ))]
/// Creates a WebSocket handshake from a request and a stream, /// Creates a WebSocket handshake from a request and a stream,
@ -190,7 +206,8 @@ where
#[cfg(any( #[cfg(any(
feature = "tokio-native-tls", feature = "tokio-native-tls",
feature = "tokio-rustls", feature = "tokio-rustls-native-certs",
feature = "tokio-rustls-webpki-roots",
all(feature = "async-tls", not(feature = "tokio-openssl")) all(feature = "async-tls", not(feature = "tokio-openssl"))
))] ))]
/// Creates a WebSocket handshake from a request and a stream, /// Creates a WebSocket handshake from a request and a stream,
@ -211,7 +228,8 @@ where
#[cfg(any( #[cfg(any(
feature = "tokio-native-tls", feature = "tokio-native-tls",
feature = "tokio-rustls", feature = "tokio-rustls-native-certs",
feature = "tokio-rustls-webpki-roots",
all(feature = "async-tls", not(feature = "tokio-openssl")) all(feature = "async-tls", not(feature = "tokio-openssl"))
))] ))]
/// Creates a WebSocket handshake from a request and a stream, /// Creates a WebSocket handshake from a request and a stream,
@ -232,7 +250,11 @@ where
#[cfg(all( #[cfg(all(
feature = "tokio-openssl", feature = "tokio-openssl",
not(any(feature = "tokio-native-tls", feature = "tokio-rustls")) not(any(
feature = "tokio-native-tls",
feature = "tokio-rustls-native-certs",
feature = "tokio-rustls-webpki-roots"
))
))] ))]
/// Creates a WebSocket handshake from a request and a stream, /// Creates a WebSocket handshake from a request and a stream,
/// upgrading the stream to TLS if required. /// upgrading the stream to TLS if required.
@ -256,7 +278,11 @@ where
#[cfg(all( #[cfg(all(
feature = "tokio-openssl", feature = "tokio-openssl",
not(any(feature = "tokio-native-tls", feature = "tokio-rustls")) not(any(
feature = "tokio-native-tls",
feature = "tokio-rustls-native-certs",
feature = "tokio-rustls-webpki-roots"
))
))] ))]
/// Creates a WebSocket handshake from a request and a stream, /// Creates a WebSocket handshake from a request and a stream,
/// upgrading the stream to TLS if required and using the given /// upgrading the stream to TLS if required and using the given
@ -282,7 +308,11 @@ where
#[cfg(all( #[cfg(all(
feature = "tokio-openssl", feature = "tokio-openssl",
not(any(feature = "tokio-native-tls", feature = "tokio-rustls")) not(any(
feature = "tokio-native-tls",
feature = "tokio-rustls-native-certs",
feature = "tokio-rustls-webpki-roots"
))
))] ))]
/// Creates a WebSocket handshake from a request and a stream, /// Creates a WebSocket handshake from a request and a stream,
/// upgrading the stream to TLS if required and using the given /// upgrading the stream to TLS if required and using the given
@ -340,7 +370,8 @@ where
#[cfg(any( #[cfg(any(
feature = "async-tls", feature = "async-tls",
feature = "tokio-native-tls", feature = "tokio-native-tls",
feature = "tokio-rustls", feature = "tokio-rustls-native-certs",
feature = "tokio-rustls-webpki-roots",
feature = "tokio-openssl" feature = "tokio-openssl"
))] ))]
/// Connect to a given URL using the provided TLS connector. /// Connect to a given URL using the provided TLS connector.
@ -357,7 +388,8 @@ where
#[cfg(any( #[cfg(any(
feature = "async-tls", feature = "async-tls",
feature = "tokio-native-tls", feature = "tokio-native-tls",
feature = "tokio-rustls", feature = "tokio-rustls-native-certs",
feature = "tokio-rustls-webpki-roots",
feature = "tokio-openssl" feature = "tokio-openssl"
))] ))]
/// Connect to a given URL using the provided TLS connector. /// Connect to a given URL using the provided TLS connector.

@ -36,6 +36,12 @@ where
connector connector
} else { } else {
let mut config = ClientConfig::new(); let mut config = ClientConfig::new();
#[cfg(feature = "tokio-rustls-native-certs")]
{
config.root_store =
rustls_native_certs::load_native_certs().map_err(|(_, err)| err)?;
}
#[cfg(feature = "tokio-rustls-webpki-roots")]
config config
.root_store .root_store
.add_server_trust_anchors(&webpki_roots::TLS_SERVER_ROOTS); .add_server_trust_anchors(&webpki_roots::TLS_SERVER_ROOTS);

Loading…
Cancel
Save