Compare commits

..

21 Commits

Author SHA1 Message Date
b3a1be7c18 Update Rust crate env_logger to 0.10.2
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-01-19 00:33:24 +00:00
8bc3518a2d Fix cargo clippy issue
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-17 19:53:13 +01:00
e534deefae Managed to update rustls to version 0.21 2024-01-17 19:52:28 +01:00
5609708848 Updated rustls_pemfile
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-17 19:36:29 +01:00
9e396262ff Updated straightforward dependencies
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-17 19:25:35 +01:00
4ee0d8c49d Merge pull request 'Update Rust crate serde to 1.0.195' (#107) from renovate/serde-1.x into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #107
2024-01-17 18:21:15 +00:00
ce5a4562a7 Merge pull request 'Update Rust crate clap to 4.4.14' (#108) from renovate/clap-4.x into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #108
2024-01-17 18:21:04 +00:00
c873c29339 Update Rust crate clap to 4.4.14
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2024-01-09 00:11:02 +00:00
c561441a4c Update Rust crate serde to 1.0.195
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2024-01-07 00:11:45 +00:00
a31868fb27 Update Rust crate clap to 4.4.13
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-01-05 00:11:21 +00:00
8a5cc2952f Allow Renovate to perform major updates
All checks were successful
continuous-integration/drone/push Build is passing
2024-01-03 10:04:48 +00:00
5d15ba4515 Update Rust crate serde to 1.0.194
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-01-03 00:21:46 +00:00
6d56f50512 Update Rust crate clap to 4.4.12
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-12-29 00:22:14 +00:00
41bef1bdcd Update Rust crate futures to 0.3.30
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-12-25 00:20:47 +00:00
88a11b143a Merge pull request 'Update Rust crate serde to 1.0.193' (#88) from renovate/serde-1.x into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #88
2023-12-23 13:36:09 +00:00
8622488028 Merge pull request 'Update Rust crate bytes to 1.5.0' (#94) from renovate/bytes-1.x into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #94
2023-12-23 13:36:01 +00:00
9500df553a Update Rust crate pem to 3.0.3
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-15 00:16:12 +00:00
804c3e433b Update Rust crate env_logger to 0.10.1
All checks were successful
continuous-integration/drone/push Build is passing
2023-12-14 00:50:39 +00:00
9ba0125cfa Update Rust crate bytes to 1.5.0
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2023-12-14 00:18:20 +00:00
8ebe46d2e4 Update Rust crate serde to 1.0.193
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2023-12-14 00:18:03 +00:00
27d62d6552 Update Rust crate clap to 4.4.11
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-12-14 00:17:33 +00:00
7 changed files with 581 additions and 514 deletions

1021
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -5,26 +5,27 @@ edition = "2021"
description = "TCP-over-HTTP solution"
[dependencies]
clap = { version = "4.4.0", features = ["derive", "env"] }
clap = { version = "4.4.18", features = ["derive", "env"] }
log = "0.4.20"
env_logger = "0.10.1"
env_logger = "0.10.2"
actix = "0.13.1"
actix-web = { version = "4", features = ["rustls"] }
actix-web = { version = "4", features = ["rustls-0_21"] }
actix-web-actors = "4.2.0"
actix-tls = "3.1.1"
serde = { version = "1.0.185", features = ["derive"] }
tokio = { version = "1", features = ["full"] }
futures = "0.3.29"
serde = { version = "1.0.195", features = ["derive"] }
tokio = { version = "1.35.1", features = ["full"] }
futures = "0.3.30"
webpki = "0.22.4"
x509-parser = "0.15.1"
pem = "3.0.2"
reqwest = { version = "0.11", features = ["json", "rustls-tls"], default-features = false }
tokio-tungstenite = { version = "0.18.0", features = ["__rustls-tls", "rustls-tls-native-roots"] }
pem = "3.0.3"
reqwest = { version = "0.11.23", features = ["json", "rustls-tls"], default-features = false }
tokio-tungstenite = { version = "0.20.0", features = ["__rustls-tls", "rustls-tls-native-roots"] }
urlencoding = "2.1.3"
hyper-rustls = { version = "0.23.2", features = ["rustls-native-certs"] }
bytes = "1.4.0"
rustls-pemfile = "1.0.4"
rustls = { version = "0.20.7", features = ["dangerous_configuration"] }
bytes = "1.5.0"
rustls-pemfile = "2.0.0"
rustls = { version = "0.21.0", features = ["dangerous_configuration"] }
rustls-native-certs = "0.6.3"
[dev-dependencies]
rand = "0.8.5"

View File

@ -2,7 +2,7 @@
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"packageRules": [
{
"matchUpdateTypes": ["minor", "patch"],
"matchUpdateTypes": ["major", "minor", "patch"],
"automerge": true
}
]

View File

@ -2,16 +2,15 @@ use std::error::Error;
use std::io::{Cursor, ErrorKind};
use rustls::{Certificate, PrivateKey};
use rustls_pemfile::{read_one, Item};
use rustls_pemfile::Item;
/// Parse PEM certificates bytes into a [`rustls::Certificate`] structure
///
/// An error is returned if not any certificate could be found
pub fn parse_pem_certificates(certs: &[u8]) -> Result<Vec<Certificate>, Box<dyn Error>> {
let certs = rustls_pemfile::certs(&mut Cursor::new(certs))?
.into_iter()
.map(Certificate)
.collect::<Vec<_>>();
let certs = rustls_pemfile::certs(&mut Cursor::new(certs))
.map(|c| c.map(|c| Certificate(c.to_vec())))
.collect::<Result<Vec<_>, _>>()?;
if certs.is_empty() {
Err(std::io::Error::new(
@ -26,7 +25,7 @@ pub fn parse_pem_certificates(certs: &[u8]) -> Result<Vec<Certificate>, Box<dyn
/// Parse PEM private key bytes into a [`rustls::PrivateKey`] structure
pub fn parse_pem_private_key(privkey: &[u8]) -> Result<PrivateKey, Box<dyn Error>> {
let key = match read_one(&mut Cursor::new(privkey))? {
let key = match rustls_pemfile::read_one(&mut Cursor::new(privkey))? {
None => {
Err(std::io::Error::new(
ErrorKind::Other,
@ -34,8 +33,8 @@ pub fn parse_pem_private_key(privkey: &[u8]) -> Result<PrivateKey, Box<dyn Error
))?;
unreachable!()
}
Some(Item::PKCS8Key(key)) => key,
Some(Item::RSAKey(key)) => key,
Some(Item::Pkcs8Key(key)) => key.secret_pkcs8_der().to_vec(),
Some(Item::Pkcs1Key(key)) => key.secret_pkcs1_der().to_vec(),
_ => {
Err(std::io::Error::new(
ErrorKind::Other,

View File

@ -1,7 +1,6 @@
use std::sync::Arc;
use futures::{SinkExt, StreamExt};
use hyper_rustls::ConfigBuilderExt;
use rustls::RootCertStore;
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use tokio::net::{TcpListener, TcpStream};
@ -42,7 +41,17 @@ async fn relay_connection(ws_url: String, socket: TcpStream, conf: Arc<ClientCon
let config = rustls::ClientConfig::builder().with_safe_defaults();
let config = match conf.get_root_certificate() {
None => config.with_native_roots(),
None => {
// Perform a connection over TLS
let mut roots = RootCertStore::empty();
for cert in rustls_native_certs::load_native_certs()
.expect("Failed to load native certificates")
{
roots.add(&rustls::Certificate(cert.0)).unwrap();
}
config.with_root_certificates(roots)
}
Some(cert) => {
log::debug!("Using custom root certificates");
let mut store = RootCertStore::empty();
@ -65,14 +74,14 @@ async fn relay_connection(ws_url: String, socket: TcpStream, conf: Arc<ClientCon
.expect("Failed to parse client auth private key!");
config
.with_single_cert(certs, key)
.with_client_auth_cert(certs, key)
.expect("Failed to set client certificate!")
}
};
let connector = tokio_tungstenite::Connector::Rustls(Arc::new(config));
let (ws_stream, _) =
tokio_tungstenite::connect_async_tls_with_config(ws_url, None, Some(connector))
tokio_tungstenite::connect_async_tls_with_config(ws_url, None, false, Some(connector))
.await
.expect("Failed to connect to server relay!");

View File

@ -121,7 +121,7 @@ pub async fn run_app(mut config: ServerConfig) -> std::io::Result<()> {
});
if let Some(tls_conf) = tls_config {
server.bind_rustls(&args.listen_address, tls_conf)?
server.bind_rustls_021(&args.listen_address, tls_conf)?
} else {
server.bind(&args.listen_address)?
}

View File

@ -1,9 +1,8 @@
use std::sync::Arc;
use std::time::SystemTime;
use rustls::internal::msgs::enums::AlertDescription;
use rustls::server::{AllowAnyAuthenticatedClient, ClientCertVerified, ClientCertVerifier};
use rustls::{Certificate, DistinguishedNames, Error, RootCertStore};
use rustls::{AlertDescription, Certificate, DistinguishedName, Error, RootCertStore};
use x509_parser::prelude::{CertificateRevocationList, FromDer, X509Certificate};
use crate::base::cert_utils::parse_pem_certificates;
@ -61,7 +60,7 @@ impl CustomCertClientVerifier {
};
Ok(Self {
upstream_cert_verifier: Box::new(AllowAnyAuthenticatedClient::new(store)),
upstream_cert_verifier: Box::new(Arc::new(AllowAnyAuthenticatedClient::new(store))),
crl,
})
}
@ -72,12 +71,12 @@ impl ClientCertVerifier for CustomCertClientVerifier {
true
}
fn client_auth_mandatory(&self) -> Option<bool> {
Some(true)
fn client_auth_mandatory(&self) -> bool {
true
}
fn client_auth_root_subjects(&self) -> Option<DistinguishedNames> {
Some(vec![])
fn client_auth_root_subjects(&self) -> &[DistinguishedName] {
&[]
}
fn verify_client_cert(