Use custom rustls and alpn fedichatv0

Maybe this fixes a bug I'm looking at? Not sure though. It should make
the protocol more robust though
This commit is contained in:
2026-06-01 14:28:21 -07:00
parent bcfd328c04
commit 0fc73f1c85
3 changed files with 91 additions and 5 deletions
Generated
+59
View File
@@ -75,6 +75,28 @@ version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
[[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.22.1" version = "0.22.1"
@@ -156,6 +178,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98"
dependencies = [ dependencies = [
"find-msvc-tools", "find-msvc-tools",
"jobserver",
"libc",
"shlex", "shlex",
] ]
@@ -238,6 +262,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 = "cmov" name = "cmov"
version = "0.5.3" version = "0.5.3"
@@ -274,6 +307,7 @@ dependencies = [
"quinn", "quinn",
"rand 0.10.1", "rand 0.10.1",
"rmp-serde", "rmp-serde",
"rustls",
"serde", "serde",
"thiserror 2.0.18", "thiserror 2.0.18",
"time", "time",
@@ -525,6 +559,12 @@ dependencies = [
"syn", "syn",
] ]
[[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"
@@ -607,6 +647,12 @@ version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
[[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"
@@ -823,6 +869,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.98" version = "0.3.98"
@@ -1322,6 +1378,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",
@@ -1385,6 +1443,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",
+1
View File
@@ -23,4 +23,5 @@ bcrypt = "0.19.1"
time = { version = "0.3.47", features = ["serde"] } time = { version = "0.3.47", features = ["serde"] }
rand = "0.10.1" rand = "0.10.1"
uuid = { version = "1.23.2", features = ["v4"] } uuid = { version = "1.23.2", features = ["v4"] }
rustls = "0.23.40"
#postcard = {version = "1.1.3", features = ["use-std"]} #postcard = {version = "1.1.3", features = ["use-std"]}
+31 -5
View File
@@ -12,6 +12,7 @@ use diesel_async::pooled_connection::AsyncDieselConnectionManager;
use diesel_async::pooled_connection::deadpool::Pool; use diesel_async::pooled_connection::deadpool::Pool;
use quinn::rustls::pki_types::{PrivateKeyDer,CertificateDer,pem::PemObject}; use quinn::rustls::pki_types::{PrivateKeyDer,CertificateDer,pem::PemObject};
use quinn::Endpoint; use quinn::Endpoint;
use quinn::crypto::rustls::QuicServerConfig;
use std::io; use std::io;
use std::fs; use std::fs;
use std::net::{IpAddr,SocketAddr}; use std::net::{IpAddr,SocketAddr};
@@ -22,7 +23,6 @@ use serde::{Deserialize,Serialize};
use tracing::{error,instrument,warn,debug,info,Level}; use tracing::{error,instrument,warn,debug,info,Level};
use tokio::sync::{RwLock,broadcast,mpsc}; use tokio::sync::{RwLock,broadcast,mpsc};
use crate::config::Config; use crate::config::Config;
use crate::state::{State,StateError}; use crate::state::{State,StateError};
@@ -147,17 +147,43 @@ async fn main() -> ExitCode {
}; };
let quinn_config = match quinn::ServerConfig::with_single_cert(certs, key){ let server_crypto = match rustls::ServerConfig::builder()
Ok(val) => val, .with_no_client_auth()
.with_single_cert(certs, key)
{
Ok(mut val) => {
val.alpn_protocols = vec![b"fedichatv0".to_vec()];
match QuicServerConfig::try_from(val) {
Ok(conf) => conf,
Err(e) => {
error!("Unable to intialize TLS server configuration: {}",e);
return ExitCode::FAILURE;
}
}
},
Err(e) => { Err(e) => {
error!("Unable to intialize quinn server configuration: {:?}",e); error!("Unable to intialize TLS server configuration: {}",e);
return ExitCode::FAILURE; return ExitCode::FAILURE;
} }
}; };
let server_config =
quinn::ServerConfig::with_crypto(Arc::new(server_crypto));
//let quinn_config = match quinn::ServerConfig::with_single_cert(certs, key){
// Ok(val) => val,
// Err(e) => {
// error!("Unable to intialize quinn server configuration: {:?}",e);
// return ExitCode::FAILURE;
// }
//};
// Bind this endpoint to a UDP socket on the given server address. // Bind this endpoint to a UDP socket on the given server address.
let endpoint = match Endpoint::server( let endpoint = match Endpoint::server(
quinn_config, server_config,
SocketAddr::new(address,config.port) SocketAddr::new(address,config.port)
) { ) {
Ok(val) => val, Ok(val) => val,