Manually setup rustls protocol

For some reason the default was broken and I don't know why. Also for
some reason the rustls default feature to set a default provider doesnt
work so I had to manually set that up too
This commit is contained in:
2026-06-01 15:56:37 -07:00
parent bcd9f1992d
commit 2dd4f21534
3 changed files with 102 additions and 2 deletions
Generated
+82 -1
View File
@@ -87,6 +87,28 @@ version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
[[package]]
name = "aws-lc-rs"
version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00"
dependencies = [
"aws-lc-sys",
"zeroize",
]
[[package]]
name = "aws-lc-sys"
version = "0.41.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4"
dependencies = [
"cc",
"cmake",
"dunce",
"fs_extra",
]
[[package]] [[package]]
name = "base64" name = "base64"
version = "0.13.1" version = "0.13.1"
@@ -150,6 +172,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f"
dependencies = [ dependencies = [
"find-msvc-tools", "find-msvc-tools",
"jobserver",
"libc",
"shlex", "shlex",
] ]
@@ -222,6 +246,15 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
[[package]]
name = "cmake"
version = "0.1.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678"
dependencies = [
"cc",
]
[[package]] [[package]]
name = "colorchoice" name = "colorchoice"
version = "1.0.5" version = "1.0.5"
@@ -436,6 +469,12 @@ version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f"
[[package]]
name = "dunce"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
[[package]] [[package]]
name = "ed25519" name = "ed25519"
version = "2.2.3" version = "2.2.3"
@@ -535,6 +574,8 @@ dependencies = [
"quinn", "quinn",
"rand 0.8.6", "rand 0.8.6",
"rmp-serde", "rmp-serde",
"rustls",
"rustls-platform-verifier 0.7.0",
"serde", "serde",
"thiserror 2.0.18", "thiserror 2.0.18",
"time", "time",
@@ -572,6 +613,12 @@ dependencies = [
"percent-encoding", "percent-encoding",
] ]
[[package]]
name = "fs_extra"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
[[package]] [[package]]
name = "futures-channel" name = "futures-channel"
version = "0.3.32" version = "0.3.32"
@@ -1005,6 +1052,16 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "jobserver"
version = "0.1.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
dependencies = [
"getrandom 0.3.4",
"libc",
]
[[package]] [[package]]
name = "js-sys" name = "js-sys"
version = "0.3.99" version = "0.3.99"
@@ -1326,7 +1383,7 @@ dependencies = [
"rustc-hash", "rustc-hash",
"rustls", "rustls",
"rustls-pki-types", "rustls-pki-types",
"rustls-platform-verifier", "rustls-platform-verifier 0.6.2",
"slab", "slab",
"thiserror 2.0.18", "thiserror 2.0.18",
"tinyvec", "tinyvec",
@@ -1543,6 +1600,8 @@ version = "0.23.40"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b"
dependencies = [ dependencies = [
"aws-lc-rs",
"log",
"once_cell", "once_cell",
"ring", "ring",
"rustls-pki-types", "rustls-pki-types",
@@ -1594,6 +1653,27 @@ dependencies = [
"windows-sys 0.61.2", "windows-sys 0.61.2",
] ]
[[package]]
name = "rustls-platform-verifier"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0"
dependencies = [
"core-foundation 0.10.1",
"core-foundation-sys",
"jni 0.22.4",
"log",
"once_cell",
"rustls",
"rustls-native-certs",
"rustls-platform-verifier-android",
"rustls-webpki",
"security-framework",
"security-framework-sys",
"webpki-root-certs",
"windows-sys 0.61.2",
]
[[package]] [[package]]
name = "rustls-platform-verifier-android" name = "rustls-platform-verifier-android"
version = "0.1.1" version = "0.1.1"
@@ -1606,6 +1686,7 @@ version = "0.103.13"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"
dependencies = [ dependencies = [
"aws-lc-rs",
"ring", "ring",
"rustls-pki-types", "rustls-pki-types",
"untrusted", "untrusted",
+2
View File
@@ -23,3 +23,5 @@ expanduser = "1.2.2"
uuid = { version = "1.23.2", features = ["v4"] } uuid = { version = "1.23.2", features = ["v4"] }
ed25519-dalek = { version = "2.2.0", features = ["rand_core", "serde"] } ed25519-dalek = { version = "2.2.0", features = ["rand_core", "serde"] }
rand = "0.8" rand = "0.8"
rustls = {version = "0.23.40" }
rustls-platform-verifier = "0.7.0"
+18 -1
View File
@@ -15,9 +15,11 @@ use std::time::Duration;
use std::sync::Arc; use std::sync::Arc;
use quinn::Endpoint; use quinn::Endpoint;
use quinn::TransportConfig; use quinn::TransportConfig;
use quinn::crypto::rustls::QuicClientConfig;
use rmp_serde::encode::Serializer; use rmp_serde::encode::Serializer;
use serde::Serialize; use serde::Serialize;
use tracing::{instrument,debug,Level}; use tracing::{instrument,debug,Level};
use rustls_platform_verifier::{BuilderVerifierExt};
const CLIENT_ADDR: SocketAddr = SocketAddr::new(IpAddr::V6(std::net::Ipv6Addr::UNSPECIFIED), 0); const CLIENT_ADDR: SocketAddr = SocketAddr::new(IpAddr::V6(std::net::Ipv6Addr::UNSPECIFIED), 0);
const PORT: u16 = 53512; const PORT: u16 = 53512;
@@ -76,11 +78,26 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
let response = resolver.lookup_ip(&target_server).await.unwrap().iter() let response = resolver.lookup_ip(&target_server).await.unwrap().iter()
.next().expect("DNS lookup of server failed"); .next().expect("DNS lookup of server failed");
debug!("Found address {response}"); debug!("Found address {response}");
// create connection // create connection
let mut transport_config: TransportConfig = TransportConfig::default(); let mut transport_config: TransportConfig = TransportConfig::default();
transport_config.keep_alive_interval(Some(Duration::from_secs(1))); transport_config.keep_alive_interval(Some(Duration::from_secs(1)));
let mut client_config = quinn::ClientConfig::try_with_platform_verifier().unwrap();
let provider = rustls::crypto::aws_lc_rs::default_provider();
let mut client_crypto = rustls::ClientConfig::builder_with_provider(Arc::new(provider))
.with_protocol_versions(&[&rustls::version::TLS13])?
.with_platform_verifier()?
.with_no_client_auth();
client_crypto.enable_early_data = true;
client_crypto.alpn_protocols = vec![b"fedichatv0".to_vec()];
let mut client_config = quinn::ClientConfig::new(Arc::new(QuicClientConfig::try_from(client_crypto)?));
client_config.transport_config(Arc::new(transport_config)); client_config.transport_config(Arc::new(transport_config));
let endpoint = Endpoint::client(CLIENT_ADDR)?; let endpoint = Endpoint::client(CLIENT_ADDR)?;
let connection = endpoint.connect_with( let connection = endpoint.connect_with(
client_config, client_config,