Skip to content

Commit de25333

Browse files
committed
Revert "chore(deps): Upgrade tokio-rustls to 0.26 (#3419)"
This reverts commit bb6e9b7. Signed-off-by: Scott Fleener <[email protected]>
1 parent cfc0de7 commit de25333

File tree

14 files changed

+120
-224
lines changed

14 files changed

+120
-224
lines changed

Cargo.lock

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3423,26 +3423,23 @@ dependencies = [
34233423

34243424
[[package]]
34253425
name = "rustls"
3426-
version = "0.23.21"
3426+
version = "0.21.12"
34273427
source = "registry+https://github.com/rust-lang/crates.io-index"
3428-
checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8"
3428+
checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e"
34293429
dependencies = [
34303430
"log",
3431-
"once_cell",
34323431
"ring",
3433-
"rustls-pki-types",
34343432
"rustls-webpki",
3435-
"subtle",
3436-
"zeroize",
3433+
"sct",
34373434
]
34383435

34393436
[[package]]
34403437
name = "rustls-pemfile"
3441-
version = "2.2.0"
3438+
version = "1.0.4"
34423439
source = "registry+https://github.com/rust-lang/crates.io-index"
3443-
checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50"
3440+
checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
34443441
dependencies = [
3445-
"rustls-pki-types",
3442+
"base64 0.21.7",
34463443
]
34473444

34483445
[[package]]
@@ -3453,12 +3450,11 @@ checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37"
34533450

34543451
[[package]]
34553452
name = "rustls-webpki"
3456-
version = "0.102.8"
3453+
version = "0.101.7"
34573454
source = "registry+https://github.com/rust-lang/crates.io-index"
3458-
checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9"
3455+
checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
34593456
dependencies = [
34603457
"ring",
3461-
"rustls-pki-types",
34623458
"untrusted",
34633459
]
34643460

@@ -3480,6 +3476,16 @@ version = "1.2.0"
34803476
source = "registry+https://github.com/rust-lang/crates.io-index"
34813477
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
34823478

3479+
[[package]]
3480+
name = "sct"
3481+
version = "0.7.1"
3482+
source = "registry+https://github.com/rust-lang/crates.io-index"
3483+
checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
3484+
dependencies = [
3485+
"ring",
3486+
"untrusted",
3487+
]
3488+
34833489
[[package]]
34843490
name = "semver"
34853491
version = "1.0.25"
@@ -3622,12 +3628,6 @@ version = "1.2.0"
36223628
source = "registry+https://github.com/rust-lang/crates.io-index"
36233629
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
36243630

3625-
[[package]]
3626-
name = "subtle"
3627-
version = "2.6.1"
3628-
source = "registry+https://github.com/rust-lang/crates.io-index"
3629-
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
3630-
36313631
[[package]]
36323632
name = "symbolic-common"
36333633
version = "12.13.3"
@@ -3874,9 +3874,9 @@ dependencies = [
38743874

38753875
[[package]]
38763876
name = "tokio-rustls"
3877-
version = "0.26.1"
3877+
version = "0.24.1"
38783878
source = "registry+https://github.com/rust-lang/crates.io-index"
3879-
checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37"
3879+
checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
38803880
dependencies = [
38813881
"rustls",
38823882
"tokio",
@@ -4498,12 +4498,6 @@ dependencies = [
44984498
"synstructure",
44994499
]
45004500

4501-
[[package]]
4502-
name = "zeroize"
4503-
version = "1.8.1"
4504-
source = "registry+https://github.com/rust-lang/crates.io-index"
4505-
checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
4506-
45074501
[[package]]
45084502
name = "zerovec"
45094503
version = "0.10.4"

Cargo.toml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,6 @@ http-body = { version = "0.4" }
104104
hyper = { version = "0.14.32", default-features = false }
105105
prost = { version = "0.12" }
106106
prost-types = { version = "0.12" }
107-
tokio-rustls = { version = "0.26", default-features = false, features = [
108-
"ring",
109-
"logging",
110-
] }
111107
tonic = { version = "0.10", default-features = false }
112108
tonic-build = { version = "0.10", default-features = false }
113109

linkerd/app/integration/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ regex = "1"
4747
socket2 = "0.5"
4848
tokio = { version = "1", features = ["io-util", "net", "rt", "macros"] }
4949
tokio-stream = { version = "0.1", features = ["sync"] }
50-
tokio-rustls = { workspace = true }
51-
rustls-pemfile = "2.2"
50+
tokio-rustls = "0.24"
51+
rustls-pemfile = "1.0"
5252
tower = { version = "0.4", default-features = false }
5353
tonic = { workspace = true, features = ["transport"], default-features = false }
5454
tracing = "0.1"

linkerd/app/integration/src/client.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ use super::*;
22
use linkerd_app_core::proxy::http::TracingExecutor;
33
use parking_lot::Mutex;
44
use std::io;
5-
use tokio::{net::TcpStream, task::JoinHandle};
5+
use tokio::net::TcpStream;
6+
use tokio::task::JoinHandle;
67
use tokio_rustls::rustls::{self, ClientConfig};
78
use tracing::info_span;
89

@@ -14,13 +15,12 @@ type Sender = mpsc::UnboundedSender<(Request, oneshot::Sender<Result<Response, C
1415
#[derive(Clone)]
1516
pub struct TlsConfig {
1617
client_config: Arc<ClientConfig>,
17-
name: rustls::pki_types::ServerName<'static>,
18+
name: rustls::ServerName,
1819
}
1920

2021
impl TlsConfig {
21-
pub fn new(client_config: Arc<ClientConfig>, name: &'static str) -> Self {
22-
let name =
23-
rustls::pki_types::ServerName::try_from(name).expect("name must be a valid DNS name");
22+
pub fn new(client_config: Arc<ClientConfig>, name: &str) -> Self {
23+
let name = rustls::ServerName::try_from(name).expect("name must be a valid DNS name");
2424
TlsConfig {
2525
client_config,
2626
name,

linkerd/app/integration/src/identity.rs

Lines changed: 23 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use std::{
88
};
99

1010
use linkerd2_proxy_api::identity as pb;
11-
use tokio_rustls::rustls::{self, pki_types::CertificateDer, server::WebPkiClientVerifier};
11+
use tokio_rustls::rustls;
1212
use tonic as grpc;
1313

1414
pub struct Identity {
@@ -36,7 +36,7 @@ type Certify = Box<
3636

3737
static TLS_VERSIONS: &[&rustls::SupportedProtocolVersion] = &[&rustls::version::TLS13];
3838
static TLS_SUPPORTED_CIPHERSUITES: &[rustls::SupportedCipherSuite] =
39-
&[rustls::crypto::ring::cipher_suite::TLS13_CHACHA20_POLY1305_SHA256];
39+
&[rustls::cipher_suite::TLS13_CHACHA20_POLY1305_SHA256];
4040

4141
struct Certificates {
4242
pub leaf: Vec<u8>,
@@ -50,32 +50,23 @@ impl Certificates {
5050
{
5151
let f = fs::File::open(p)?;
5252
let mut r = io::BufReader::new(f);
53-
let mut certs = rustls_pemfile::certs(&mut r);
54-
let leaf = certs
55-
.next()
56-
.expect("no leaf cert in pemfile")
57-
.map_err(|_| io::Error::new(io::ErrorKind::Other, "rustls error reading certs"))?
58-
.as_ref()
59-
.to_vec();
60-
let intermediates = certs
61-
.map(|cert| cert.map(|cert| cert.as_ref().to_vec()))
62-
.collect::<Result<Vec<_>, _>>()
53+
let mut certs = rustls_pemfile::certs(&mut r)
6354
.map_err(|_| io::Error::new(io::ErrorKind::Other, "rustls error reading certs"))?;
55+
let mut certs = certs.drain(..);
56+
let leaf = certs.next().expect("no leaf cert in pemfile");
57+
let intermediates = certs.collect();
6458

6559
Ok(Certificates {
6660
leaf,
6761
intermediates,
6862
})
6963
}
7064

71-
pub fn chain(&self) -> Vec<rustls::pki_types::CertificateDer<'static>> {
65+
pub fn chain(&self) -> Vec<rustls::Certificate> {
7266
let mut chain = Vec::with_capacity(self.intermediates.len() + 1);
7367
chain.push(self.leaf.clone());
7468
chain.extend(self.intermediates.clone());
75-
chain
76-
.into_iter()
77-
.map(rustls::pki_types::CertificateDer::from)
78-
.collect()
69+
chain.into_iter().map(rustls::Certificate).collect()
7970
}
8071

8172
pub fn response(&self) -> pb::CertifyResponse {
@@ -88,49 +79,43 @@ impl Certificates {
8879
}
8980

9081
impl Identity {
91-
fn load_key<P>(p: P) -> rustls::pki_types::PrivateKeyDer<'static>
82+
fn load_key<P>(p: P) -> rustls::PrivateKey
9283
where
9384
P: AsRef<Path>,
9485
{
9586
let p8 = fs::read(&p).expect("read key");
96-
rustls::pki_types::PrivateKeyDer::try_from(p8).expect("decode key")
87+
rustls::PrivateKey(p8)
9788
}
9889

9990
fn configs(
10091
trust_anchors: &str,
10192
certs: &Certificates,
102-
key: rustls::pki_types::PrivateKeyDer<'static>,
93+
key: rustls::PrivateKey,
10394
) -> (Arc<rustls::ClientConfig>, Arc<rustls::ServerConfig>) {
10495
use std::io::Cursor;
10596
let mut roots = rustls::RootCertStore::empty();
106-
let trust_anchors = rustls_pemfile::certs(&mut Cursor::new(trust_anchors))
107-
.map(|bytes| bytes.map(CertificateDer::from))
108-
.collect::<Result<Vec<_>, _>>()
109-
.expect("error parsing pemfile");
110-
let (added, skipped) = roots.add_parsable_certificates(trust_anchors);
97+
let trust_anchors =
98+
rustls_pemfile::certs(&mut Cursor::new(trust_anchors)).expect("error parsing pemfile");
99+
let (added, skipped) = roots.add_parsable_certificates(&trust_anchors[..]);
111100
assert_ne!(added, 0, "trust anchors must include at least one cert");
112101
assert_eq!(skipped, 0, "no certs in pemfile should be invalid");
113102

114-
let mut provider = rustls::crypto::ring::default_provider();
115-
provider.cipher_suites = TLS_SUPPORTED_CIPHERSUITES.to_vec();
116-
let provider = Arc::new(provider);
117-
118-
let client_config = rustls::ClientConfig::builder_with_provider(provider.clone())
103+
let client_config = rustls::ClientConfig::builder()
104+
.with_cipher_suites(TLS_SUPPORTED_CIPHERSUITES)
105+
.with_safe_default_kx_groups()
119106
.with_protocol_versions(TLS_VERSIONS)
120107
.expect("client config must be valid")
121108
.with_root_certificates(roots.clone())
122109
.with_no_client_auth();
123110

124-
let client_cert_verifier =
125-
WebPkiClientVerifier::builder_with_provider(Arc::new(roots), provider.clone())
126-
.allow_unauthenticated()
127-
.build()
128-
.expect("server verifier must be valid");
129-
130-
let server_config = rustls::ServerConfig::builder_with_provider(provider)
111+
let server_config = rustls::ServerConfig::builder()
112+
.with_cipher_suites(TLS_SUPPORTED_CIPHERSUITES)
113+
.with_safe_default_kx_groups()
131114
.with_protocol_versions(TLS_VERSIONS)
132115
.expect("server config must be valid")
133-
.with_client_cert_verifier(client_cert_verifier)
116+
.with_client_cert_verifier(Arc::new(
117+
rustls::server::AllowAnyAnonymousOrAuthenticatedClient::new(roots),
118+
))
134119
.with_single_cert(certs.chain(), key)
135120
.unwrap();
136121

linkerd/app/outbound/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ futures-util = "0.3"
5656
http-body = { workspace = true }
5757
hyper = { workspace = true, features = ["backports", "deprecated", "http1", "http2"] }
5858
tokio = { version = "1", features = ["macros", "sync", "time"] }
59-
tokio-rustls = { workspace = true }
59+
tokio-rustls = "0.24"
6060
tokio-test = "0.4"
6161
tower-test = "0.4"
6262

linkerd/app/outbound/src/tls/logical/tests.rs

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ use std::{
1717
time::Duration,
1818
};
1919
use tokio::sync::watch;
20-
use tokio_rustls::rustls::pki_types::DnsName;
2120

2221
mod basic;
2322

@@ -172,37 +171,28 @@ fn generate_client_hello(sni: &str) -> Vec<u8> {
172171
use tokio_rustls::rustls::{
173172
internal::msgs::{
174173
base::Payload,
175-
codec::{Codec, Reader},
176174
enums::Compression,
177175
handshake::{
178176
ClientExtension, ClientHelloPayload, HandshakeMessagePayload, HandshakePayload,
179-
Random, ServerName, SessionId,
177+
Random, SessionId,
180178
},
181179
message::{MessagePayload, PlainMessage},
182180
},
181+
server::DnsName,
183182
CipherSuite, ContentType, HandshakeType, ProtocolVersion,
184183
};
185184

186185
let sni = DnsName::try_from(sni.to_string()).unwrap();
187-
let sni = trim_hostname_trailing_dot_for_sni(&sni);
188-
189-
let mut server_name_bytes = vec![];
190-
0u8.encode(&mut server_name_bytes); // encode the type first
191-
(sni.as_ref().len() as u16).encode(&mut server_name_bytes); // then the length as u16
192-
server_name_bytes.extend_from_slice(sni.as_ref().as_bytes()); // then the server name itself
193-
194-
let server_name =
195-
ServerName::read(&mut Reader::init(&server_name_bytes)).expect("Server name is valid");
196186

197187
let hs_payload = HandshakeMessagePayload {
198188
typ: HandshakeType::ClientHello,
199189
payload: HandshakePayload::ClientHello(ClientHelloPayload {
200190
client_version: ProtocolVersion::TLSv1_2,
201191
random: Random::from([0; 32]),
202-
session_id: SessionId::read(&mut Reader::init(&[0])).unwrap(),
192+
session_id: SessionId::empty(),
203193
cipher_suites: vec![CipherSuite::TLS_NULL_WITH_NULL_NULL],
204194
compression_methods: vec![Compression::Null],
205-
extensions: vec![ClientExtension::ServerName(vec![server_name])],
195+
extensions: vec![ClientExtension::make_sni(sni.borrow())],
206196
}),
207197
};
208198

@@ -212,21 +202,8 @@ fn generate_client_hello(sni: &str) -> Vec<u8> {
212202
let message = PlainMessage {
213203
typ: ContentType::Handshake,
214204
version: ProtocolVersion::TLSv1_2,
215-
payload: Payload::Owned(hs_payload_bytes),
205+
payload: Payload(hs_payload_bytes),
216206
};
217207

218208
message.into_unencrypted_opaque().encode()
219209
}
220-
221-
fn trim_hostname_trailing_dot_for_sni(dns_name: &DnsName<'_>) -> DnsName<'static> {
222-
let dns_name_str = dns_name.as_ref();
223-
224-
// RFC6066: "The hostname is represented as a byte string using
225-
// ASCII encoding without a trailing dot"
226-
if dns_name_str.ends_with('.') {
227-
let trimmed = &dns_name_str[0..dns_name_str.len() - 1];
228-
DnsName::try_from(trimmed).unwrap().to_owned()
229-
} else {
230-
dns_name.to_owned()
231-
}
232-
}

linkerd/meshtls/rustls/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ test-util = ["linkerd-tls-test-util"]
1212
[dependencies]
1313
futures = { version = "0.3", default-features = false }
1414
ring = { version = "0.17", features = ["std"] }
15-
rustls-pemfile = "2.2"
16-
rustls-webpki = { version = "0.102.8", features = ["std"] }
15+
rustls-pemfile = "1.0"
16+
rustls-webpki = { version = "0.101.5", features = ["std"] }
1717
thiserror = "2"
1818
tokio = { version = "1", features = ["macros", "rt", "sync"] }
19-
tokio-rustls = { workspace = true }
19+
tokio-rustls = { version = "0.24", features = ["dangerous_configuration"] }
2020
tracing = "0.1"
2121

2222
linkerd-dns-name = { path = "../../dns/name" }

0 commit comments

Comments
 (0)