diff --git a/Cargo.lock b/Cargo.lock index d9b5a31..78a34c5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -123,7 +123,6 @@ dependencies = [ "arc-swap", "async-trait", "axum", - "axum-server", "base16ct", "base64", "ctrlc", @@ -333,28 +332,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "axum-server" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1df331683d982a0b9492b38127151e6453639cd34926eb9c07d4cd8c6d22bfc" -dependencies = [ - "arc-swap", - "bytes", - "either", - "fs-err", - "http", - "http-body", - "hyper", - "hyper-util", - "openssl", - "openssl-sys", - "pin-project-lite", - "tokio", - "tokio-openssl", - "tower-service", -] - [[package]] name = "backtrace" version = "0.3.74" @@ -382,6 +359,24 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "bindgen" +version = "0.72.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" +dependencies = [ + "bitflags 2.8.0", + "cexpr", + "clang-sys", + "itertools", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.100", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -430,6 +425,31 @@ dependencies = [ "objc2", ] +[[package]] +name = "boring" +version = "4.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4acbe9eda68fc7fbfb395aace52dfc37075928536ec2f149abce54dbd40e38d5" +dependencies = [ + "bitflags 2.8.0", + "boring-sys", + "foreign-types", + "libc", + "openssl-macros", +] + +[[package]] +name = "boring-sys" +version = "4.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f922afb52d05239f8d4042ca1df15da9d340c2b58bfb5b8daf15acbf8d6e195e" +dependencies = [ + "bindgen", + "cmake", + "fs_extra", + "fslock", +] + [[package]] name = "brotli" version = "3.5.0" @@ -498,6 +518,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cf-rustracing" version = "1.1.0" @@ -558,6 +587,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "clap" version = "4.5.57" @@ -842,9 +882,9 @@ dependencies = [ [[package]] name = "env_filter" -version = "0.1.3" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +checksum = "7a1c3cc8e57274ec99de65301228b537f1e4eedc1b8e0f9411c6caac8ae7308f" dependencies = [ "log", "regex", @@ -852,9 +892,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +checksum = "b2daee4ea451f429a58296525ddf28b45a3b64f1acf6587e2067437bb11e218d" dependencies = [ "anstream", "anstyle", @@ -906,18 +946,30 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "foreign-types" -version = "0.3.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" dependencies = [ + "foreign-types-macros", "foreign-types-shared", ] [[package]] -name = "foreign-types-shared" -version = "0.1.1" +name = "foreign-types-macros" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "form_urlencoded" @@ -928,16 +980,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fs-err" -version = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d7be93788013f265201256d58f04936a8079ad5dc898743aa20525f503b683" -dependencies = [ - "autocfg", - "tokio", -] - [[package]] name = "fs_extra" version = "1.3.0" @@ -945,10 +987,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] -name = "futures" -version = "0.3.31" +name = "fslock" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "futures" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -961,9 +1013,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -971,15 +1023,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", @@ -988,15 +1040,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", @@ -1005,21 +1057,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -1029,7 +1081,6 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] @@ -1090,6 +1141,12 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + [[package]] name = "h2" version = "0.4.12" @@ -1505,6 +1562,15 @@ version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.14" @@ -1631,6 +1697,16 @@ version = "0.2.174" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link 0.2.0", +] + [[package]] name = "libmimalloc-sys" version = "0.1.44" @@ -1840,9 +1916,9 @@ dependencies = [ [[package]] name = "notify" -version = "9.0.0-rc.1" +version = "9.0.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d1f660da45085290c8c3cfde8e99b5992afd363f574e25d61692c27814e7a16" +checksum = "c8b6510a5042c64929d0278a8d24f5f90aa3a9b5be52e08e4f8bf7403adb01dc" dependencies = [ "bitflags 2.8.0", "inotify", @@ -1855,6 +1931,7 @@ dependencies = [ "objc2-core-services", "walkdir", "windows-sys 0.61.0", + "xxhash-rust", ] [[package]] @@ -1958,21 +2035,6 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -[[package]] -name = "openssl" -version = "0.10.72" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" -dependencies = [ - "bitflags 2.8.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - [[package]] name = "openssl-macros" version = "0.1.1" @@ -1996,28 +2058,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" -[[package]] -name = "openssl-src" -version = "300.5.0+3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8ce546f549326b0e6052b649198487d91320875da901e7bd11a06d1ee3f9c2f" -dependencies = [ - "cc", -] - -[[package]] -name = "openssl-sys" -version = "0.9.108" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e145e1651e858e820e4860f7b9c5e169bc1d8ce1c86043be79fa7b7634821847" -dependencies = [ - "cc", - "libc", - "openssl-src", - "pkg-config", - "vcpkg", -] - [[package]] name = "parking_lot" version = "0.12.3" @@ -2109,6 +2149,20 @@ dependencies = [ "pingora-timeout", ] +[[package]] +name = "pingora-boringssl" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "635cc2b54964b7664468ed330869768343d2fddf96ceee2490a319fe3e2064c9" +dependencies = [ + "boring", + "boring-sys", + "foreign-types-shared", + "futures-util", + "libc", + "tokio", +] + [[package]] name = "pingora-cache" version = "0.7.0" @@ -2174,9 +2228,9 @@ dependencies = [ "openssl-probe 0.1.6", "parking_lot", "percent-encoding", + "pingora-boringssl", "pingora-error", "pingora-http", - "pingora-openssl", "pingora-pool", "pingora-runtime", "pingora-timeout", @@ -2282,19 +2336,6 @@ dependencies = [ "rand 0.8.5", ] -[[package]] -name = "pingora-openssl" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92713d25950fd4bf4fdca86dc3603884d13282242fdb436dac4f8389a7105556" -dependencies = [ - "foreign-types", - "libc", - "openssl", - "openssl-sys", - "tokio-openssl", -] - [[package]] name = "pingora-pool" version = "0.7.0" @@ -3336,17 +3377,6 @@ dependencies = [ "syn 2.0.100", ] -[[package]] -name = "tokio-openssl" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59df6849caa43bb7567f9a36f863c447d95a11d5903c9cc334ba32576a27eadd" -dependencies = [ - "openssl", - "openssl-sys", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.26.1" @@ -3616,12 +3646,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version_check" version = "0.9.5" @@ -4322,6 +4346,12 @@ dependencies = [ "time", ] +[[package]] +name = "xxhash-rust" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" + [[package]] name = "yoke" version = "0.7.5" diff --git a/Cargo.toml b/Cargo.toml index 63b8abc..2b9e837 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ strip = true [dependencies] tokio = { version = "1.49.0", features = ["full"] } -pingora = { version = "0.7.0", features = ["lb", "openssl"] } # openssl, rustls, boringssl +pingora = { version = "0.7.0", features = ["lb", "boringssl"] } # openssl, rustls, boringssl serde = { version = "1.0.228", features = ["derive"] } dashmap = "7.0.0-rc2" pingora-core = "0.7.0" @@ -25,7 +25,7 @@ log = "0.4.29" futures = "0.3.32" notify = "9.0.0-rc.2" axum = { version = "0.8.8" } -axum-server = { version = "0.8.0", features = ["tls-openssl"] } +#axum-server = { version = "0.8.0" } reqwest = { version = "0.13.1", features = ["json", "stream"] } serde_yaml = "0.9.34-deprecated" rand = "0.10.0-rc.8" diff --git a/src/utils/discovery.rs b/src/utils/discovery.rs index 84016fb..14b46a0 100644 --- a/src/utils/discovery.rs +++ b/src/utils/discovery.rs @@ -10,9 +10,9 @@ pub struct APIUpstreamProvider { pub config_api_enabled: bool, pub address: String, pub masterkey: String, - pub tls_address: Option, - pub tls_certificate: Option, - pub tls_key_file: Option, + // pub tls_address: Option, + // pub tls_certificate: Option, + // pub tls_key_file: Option, pub file_server_address: Option, pub file_server_folder: Option, pub current_upstreams: Arc, diff --git a/src/utils/tls.rs b/src/utils/tls.rs index b8dccb5..dc8b263 100644 --- a/src/utils/tls.rs +++ b/src/utils/tls.rs @@ -228,26 +228,30 @@ pub fn set_tsl_grade(tls_settings: &mut TlsSettings, grade: &str) { let _ = tls_settings.set_min_proto_version(Some(SslVersion::TLS1_2)); // let _ = tls_settings.set_max_proto_version(Some(SslVersion::TLS1_3)); let _ = tls_settings.set_cipher_list(CIPHERS.high); - let _ = tls_settings.set_ciphersuites(CIPHERS.high); + // let _ = tls_settings.set_ciphersuites(CIPHERS.high); + let _ = tls_settings.set_cipher_list(CIPHERS.high); info!("TLS grade: {:?}, => HIGH", tls_settings.options()); } Some(TlsGrade::MEDIUM) => { let _ = tls_settings.set_min_proto_version(Some(SslVersion::TLS1)); let _ = tls_settings.set_cipher_list(CIPHERS.medium); - let _ = tls_settings.set_ciphersuites(CIPHERS.medium); + // let _ = tls_settings.set_ciphersuites(CIPHERS.medium); + let _ = tls_settings.set_cipher_list(CIPHERS.medium); info!("TLS grade: {:?}, => MEDIUM", tls_settings.options()); } Some(TlsGrade::LEGACY) => { let _ = tls_settings.set_min_proto_version(Some(SslVersion::SSL3)); let _ = tls_settings.set_cipher_list(CIPHERS.legacy); - let _ = tls_settings.set_ciphersuites(CIPHERS.legacy); + // let _ = tls_settings.set_ciphersuites(CIPHERS.legacy); + let _ = tls_settings.set_cipher_list(CIPHERS.legacy); warn!("TLS grade: {:?}, => UNSAFE", tls_settings.options()); } None => { // Defaults to MEDIUM let _ = tls_settings.set_min_proto_version(Some(SslVersion::TLS1)); let _ = tls_settings.set_cipher_list(CIPHERS.medium); - let _ = tls_settings.set_ciphersuites(CIPHERS.medium); + // let _ = tls_settings.set_ciphersuites(CIPHERS.medium); + let _ = tls_settings.set_cipher_list(CIPHERS.medium); warn!("TLS grade is not detected defaulting top MEDIUM"); } } diff --git a/src/web/bgservice.rs b/src/web/bgservice.rs index f58b6a6..1a723d4 100644 --- a/src/web/bgservice.rs +++ b/src/web/bgservice.rs @@ -54,9 +54,9 @@ impl BackgroundService for LB { address: self.config.config_address.clone(), masterkey: self.config.master_key.clone(), config_api_enabled: self.config.config_api_enabled.clone(), - tls_address: self.config.config_tls_address.clone(), - tls_certificate: self.config.config_tls_certificate.clone(), - tls_key_file: self.config.config_tls_key_file.clone(), + // tls_address: self.config.config_tls_address.clone(), + // tls_certificate: self.config.config_tls_certificate.clone(), + // tls_key_file: self.config.config_tls_key_file.clone(), file_server_address: self.config.file_server_address.clone(), file_server_folder: self.config.file_server_folder.clone(), current_upstreams: self.ump_upst.clone(), diff --git a/src/web/webserver.rs b/src/web/webserver.rs index c3b6ee1..69a26ed 100644 --- a/src/web/webserver.rs +++ b/src/web/webserver.rs @@ -7,7 +7,7 @@ use axum::http::{Response, StatusCode}; use axum::response::IntoResponse; use axum::routing::{get, post}; use axum::{Json, Router}; -use axum_server::tls_openssl::OpenSSLConfig; +// use axum_server::tls_openssl::OpenSSLConfig; use futures::channel::mpsc::Sender; use futures::SinkExt; use jsonwebtoken::{encode, EncodingKey, Header}; @@ -15,7 +15,7 @@ use log::{error, info, warn}; use prometheus::{gather, Encoder, TextEncoder}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; -use std::net::SocketAddr; +// use std::net::SocketAddr; use std::sync::Arc; use std::time::{Duration, SystemTime, UNIX_EPOCH}; use tokio::net::TcpListener; @@ -64,17 +64,17 @@ pub async fn run_server(config: &APIUpstreamProvider, mut to_return: Sender