Async TLS for the Tokio runtime
Go to file
Brian Smith eccf90a534 Remove danger feature & the API it controls.
The singular purpose of this crate should be to integrate Tokio and
Rustls. Therefore, any feature that isn't about making Rustls work
nicely with Tokio should be assumed a priori to be out of scope.

In particular, it is out of scope for tokio-rustls to provide APIs to
control SNI behavior. Instead, the application should configure
Rustls's SNI behavior using Rustls's configuration APIs, and pass the
configuration to tokio-rustls. Similarly, it is out of scope for
tokio-rustls to provide APIs to control the certificate validation
behavior. Instead, the application should configure certificate
validation using Rustls's APIs. Perhaps there should be a crate that
makes it convenient to do "dangerous" certificate validation, but IMO
that shouldn't be tokio-rustls, but a different one.

FWIW, the `danger` API was inherited from tokio-tls, and I'm working on
making an analogous change there.
2017-08-28 18:43:33 -10:00
examples [Fixed] shutdown should only flush io 2017-04-14 13:01:46 +08:00
src Remove danger feature & the API it controls. 2017-08-28 18:43:33 -10:00
tests Remove danger feature & the API it controls. 2017-08-28 18:43:33 -10:00
.gitignore [Added] init 2017-02-21 11:59:05 +08:00
.gitjournal.toml [Added] init 2017-02-21 11:59:05 +08:00
.travis.yml [Added] tests 2017-08-13 18:48:30 +08:00
appveyor.yml [Added] tests 2017-08-13 18:48:30 +08:00
Cargo.toml Remove danger feature & the API it controls. 2017-08-28 18:43:33 -10:00
LICENSE-APACHE [Changed] update dev dependencies 2017-05-09 12:28:32 +08:00
LICENSE-MIT [Changed] update dev dependencies 2017-05-09 12:28:32 +08:00
README.md [Fixed] call only once send_close_notify 2017-08-15 22:09:45 +08:00

tokio-rustls

travis-ci appveyor crates license license docs.rs

Asynchronous TLS/SSL streams for Tokio using Rustls.

Basic Structure of a Client

use rustls::ClientConfig;
use tokio_rustls::ClientConfigExt;

// ...

let mut config = ClientConfig::new();
config.root_store.add_trust_anchors(&webpki_roots::ROOTS);
let config = Arc::new(config);

TcpStream::connect(&addr, &handle)
	.and_then(|socket| config.connect_async("www.rust-lang.org", socket))

// ...

Client Example Program

See examples/client.rs. You can run it with:

cargo run --example client hsts.badssl.com

Currently on Windows the example client reads from stdin and writes to stdout using blocking I/O. Until this is fixed, do something this on Windows:

echo | cargo run --example client hsts.badssl.com

Server Example Program

See examples/server.rs. You can run it with:

cargo run --example server -- 127.0.0.1 --cert mycert.der --key mykey.der

License & Origin

tokio-rustls is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0), with portions covered by various BSD-like licenses.

This started as a fork of tokio-tls.