Re-enable rustls feature (#625)
This commit is contained in:
@@ -19,13 +19,13 @@ matrix:
|
|||||||
|
|
||||||
# rustls-tls
|
# rustls-tls
|
||||||
#- rust: stable
|
#- rust: stable
|
||||||
#- rust: nightly
|
- rust: nightly
|
||||||
# env: FEATURES="--no-default-features --features rustls-tls"
|
env: FEATURES="--no-default-features --features rustls-tls"
|
||||||
|
|
||||||
# default-tls and rustls-tls
|
# default-tls and rustls-tls
|
||||||
#- rust: stable
|
#- rust: stable
|
||||||
#- rust: nightly
|
- rust: nightly
|
||||||
# env: FEATURES="--features rustls-tls"
|
env: FEATURES="--features rustls-tls"
|
||||||
|
|
||||||
# socks
|
# socks
|
||||||
#- rust: stable
|
#- rust: stable
|
||||||
|
|||||||
10
Cargo.toml
10
Cargo.toml
@@ -50,10 +50,10 @@ native-tls = { version = "0.2", optional = true }
|
|||||||
tokio-tls = { version = "=0.3.0-alpha.4", optional = true }
|
tokio-tls = { version = "=0.3.0-alpha.4", optional = true }
|
||||||
|
|
||||||
## rustls-tls
|
## rustls-tls
|
||||||
#hyper-rustls = { git = "https://github.com/dbcfd/hyper-rustls.git", branch = "master", optional = true }
|
hyper-rustls = { version = "=0.18.0-alpha.1", optional = true }
|
||||||
#rustls = { version = "0.16", features = ["dangerous_configuration"], optional = true }
|
rustls = { version = "0.16", features = ["dangerous_configuration"], optional = true }
|
||||||
#tokio-rustls = { version = "=0.12.0-alpha.2", optional = true }
|
tokio-rustls = { version = "=0.12.0-alpha.2", optional = true }
|
||||||
#webpki-roots = { version = "0.17", optional = true }
|
webpki-roots = { version = "0.17", optional = true }
|
||||||
|
|
||||||
## socks
|
## socks
|
||||||
#socks = { version = "0.3.2", optional = true }
|
#socks = { version = "0.3.2", optional = true }
|
||||||
@@ -77,7 +77,7 @@ tls = []
|
|||||||
default-tls = ["hyper-tls", "native-tls", "tls", "tokio-tls"]
|
default-tls = ["hyper-tls", "native-tls", "tls", "tokio-tls"]
|
||||||
default-tls-vendored = ["default-tls", "native-tls/vendored"]
|
default-tls-vendored = ["default-tls", "native-tls/vendored"]
|
||||||
|
|
||||||
#rustls-tls = ["hyper-rustls", "tokio-rustls", "webpki-roots", "rustls", "tls"]
|
rustls-tls = ["hyper-rustls", "tokio-rustls", "webpki-roots", "rustls", "tls"]
|
||||||
|
|
||||||
#trust-dns = ["trust-dns-resolver"]
|
#trust-dns = ["trust-dns-resolver"]
|
||||||
|
|
||||||
|
|||||||
@@ -238,12 +238,12 @@ async fn connect_with_maybe_proxy(
|
|||||||
// Disable Nagle's algorithm for TLS handshake
|
// Disable Nagle's algorithm for TLS handshake
|
||||||
//
|
//
|
||||||
// https://www.openssl.org/docs/man1.1.1/man3/SSL_connect.html#NOTES
|
// https://www.openssl.org/docs/man1.1.1/man3/SSL_connect.html#NOTES
|
||||||
http.set_nodelay(nodelay || (dst.scheme() == "https"));
|
http.set_nodelay(no_delay || (dst.scheme() == "https"));
|
||||||
|
|
||||||
let http = hyper_rustls::HttpsConnector::from((http, tls.clone()));
|
let http = hyper_rustls::HttpsConnector::from((http, tls.clone()));
|
||||||
let (io, connected) = http.connect(dst).await;
|
let (io, connected) = http.connect(dst).await?;
|
||||||
if let hyper_rustls::MaybeHttpsStream::Https(stream) = &io {
|
if let hyper_rustls::MaybeHttpsStream::Https(stream) = &io {
|
||||||
if !nodelay {
|
if !no_delay {
|
||||||
let (io, _) = stream.get_ref();
|
let (io, _) = stream.get_ref();
|
||||||
io.set_nodelay(false)?;
|
io.set_nodelay(false)?;
|
||||||
}
|
}
|
||||||
@@ -317,15 +317,15 @@ async fn connect_via_proxy(
|
|||||||
let host = dst.host().to_owned();
|
let host = dst.host().to_owned();
|
||||||
let port = dst.port().unwrap_or(443);
|
let port = dst.port().unwrap_or(443);
|
||||||
let mut http = http.clone();
|
let mut http = http.clone();
|
||||||
http.set_nodelay(nodelay);
|
http.set_nodelay(no_delay);
|
||||||
let http = hyper_rustls::HttpsConnector::from((http, tls_proxy.clone()));
|
let http = hyper_rustls::HttpsConnector::from((http, tls_proxy.clone()));
|
||||||
let tls = tls.clone();
|
let tls = tls.clone();
|
||||||
let (conn, connected) = http.connect(ndst).await;
|
let (conn, connected) = http.connect(ndst).await?;
|
||||||
log::trace!("tunneling HTTPS over proxy");
|
log::trace!("tunneling HTTPS over proxy");
|
||||||
let maybe_dnsname = DNSNameRef::try_from_ascii_str(&host)
|
let maybe_dnsname = DNSNameRef::try_from_ascii_str(&host)
|
||||||
.map(|dnsname| dnsname.to_owned())
|
.map(|dnsname| dnsname.to_owned())
|
||||||
.map_err(|_| io::Error::new(io::ErrorKind::Other, "Invalid DNS Name"));
|
.map_err(|_| io::Error::new(io::ErrorKind::Other, "Invalid DNS Name"));
|
||||||
let tunneled = tunnel(conn, host, port, auth).await;
|
let tunneled = tunnel(conn, host, port, auth).await?;
|
||||||
let dnsname = maybe_dnsname?;
|
let dnsname = maybe_dnsname?;
|
||||||
let io = RustlsConnector::from(tls)
|
let io = RustlsConnector::from(tls)
|
||||||
.connect(dnsname.as_ref(), tunneled)
|
.connect(dnsname.as_ref(), tunneled)
|
||||||
|
|||||||
16
src/tls.rs
16
src/tls.rs
@@ -97,17 +97,21 @@ impl Certificate {
|
|||||||
use std::io::Cursor;
|
use std::io::Cursor;
|
||||||
|
|
||||||
match self.original {
|
match self.original {
|
||||||
Cert::Der(buf) => try_!(tls
|
Cert::Der(buf) => tls
|
||||||
.root_store
|
.root_store
|
||||||
.add(&::rustls::Certificate(buf))
|
.add(&::rustls::Certificate(buf))
|
||||||
.map_err(TLSError::WebPKIError)),
|
.map_err(|e| crate::error::from(TLSError::WebPKIError(e)))?,
|
||||||
Cert::Pem(buf) => {
|
Cert::Pem(buf) => {
|
||||||
let mut pem = Cursor::new(buf);
|
let mut pem = Cursor::new(buf);
|
||||||
let certs = try_!(pemfile::certs(&mut pem).map_err(|_| TLSError::General(
|
let certs = pemfile::certs(&mut pem).map_err(|_| {
|
||||||
String::from("No valid certificate was found")
|
crate::error::from(TLSError::General(String::from(
|
||||||
)));
|
"No valid certificate was found",
|
||||||
|
)))
|
||||||
|
})?;
|
||||||
for c in certs {
|
for c in certs {
|
||||||
try_!(tls.root_store.add(&c).map_err(TLSError::WebPKIError));
|
tls.root_store
|
||||||
|
.add(&c)
|
||||||
|
.map_err(|e| crate::error::from(TLSError::WebPKIError(e)))?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user