From d9efeb42d61a73c57c83bb3bd6deade902847a0b Mon Sep 17 00:00:00 2001 From: ZettaScript Date: Mon, 13 Oct 2025 15:25:15 +0200 Subject: [PATCH] exp --- Cargo.lock | 734 +++++++++++++++++- rpxy-bin/Cargo.toml | 13 +- rpxy-bin/src/config/toml.rs | 2 + rpxy-lib/Cargo.toml | 19 +- rpxy-lib/src/backend/upstream.rs | 8 + rpxy-lib/src/forwarder/client.rs | 2 + rpxy-lib/src/globals.rs | 1 + rpxy-lib/src/lib.rs | 42 +- .../handler_manipulate_messages.rs | 6 + rpxy-lib/src/message_handler/utils_headers.rs | 3 +- submodules/s2n-quic | 2 +- 11 files changed, 778 insertions(+), 54 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 86edee8..8ed956a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,6 +17,16 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + [[package]] name = "ahash" version = "0.8.12" @@ -289,7 +299,7 @@ version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2b715a6010afb9e457ca2b7c9d2b9c344baa8baed7b38dc476034c171b32575" dependencies = [ - "bindgen", + "bindgen 0.72.1", "cc", "cmake", "dunce", @@ -312,12 +322,44 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64ct" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" + +[[package]] +name = "bindgen" +version = "0.71.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "itertools", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn", +] + [[package]] name = "bindgen" version = "0.72.1" @@ -366,6 +408,66 @@ dependencies = [ "piper", ] +[[package]] +name = "boring" +version = "4.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4acbe9eda68fc7fbfb395aace52dfc37075928536ec2f149abce54dbd40e38d5" +dependencies = [ + "bitflags", + "boring-sys", + "foreign-types 0.5.0", + "libc", + "openssl-macros", +] + +[[package]] +name = "boring-additions" +version = "0.0.1" +source = "git+https://github.com/janrueth/boring-rustls-provider.git?rev=490340afa77e2c08fc45853124f99d49f4f9f8a0#490340afa77e2c08fc45853124f99d49f4f9f8a0" +dependencies = [ + "boring", + "boring-sys", + "foreign-types 0.5.0", +] + +[[package]] +name = "boring-rustls-provider" +version = "0.0.1" +source = "git+https://github.com/janrueth/boring-rustls-provider.git?rev=490340afa77e2c08fc45853124f99d49f4f9f8a0#490340afa77e2c08fc45853124f99d49f4f9f8a0" +dependencies = [ + "aead", + "boring", + "boring-additions", + "boring-sys", + "boring-sys-additions", + "foreign-types 0.5.0", + "rustls", + "rustls-pki-types", + "spki", +] + +[[package]] +name = "boring-sys" +version = "4.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c9f08dc17fab4192e5e6b0920e6c06eb9e3e4ab98b9cff00368dfe6d1e30c9" +dependencies = [ + "autocfg", + "bindgen 0.72.1", + "cmake", + "fs_extra", + "fslock", +] + +[[package]] +name = "boring-sys-additions" +version = "0.0.1" +source = "git+https://github.com/janrueth/boring-rustls-provider.git?rev=490340afa77e2c08fc45853124f99d49f4f9f8a0#490340afa77e2c08fc45853124f99d49f4f9f8a0" +dependencies = [ + "boring-sys", +] + [[package]] name = "bumpalo" version = "3.19.0" @@ -386,9 +488,9 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cc" -version = "1.2.40" +version = "1.2.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d05d92f4b1fd76aad469d46cdd858ca761576082cd37df81416691e50199fb" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" dependencies = [ "find-msvc-tools", "jobserver", @@ -423,6 +525,30 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "chacha20poly1305" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead", + "chacha20", + "cipher", + "poly1305", + "zeroize", +] + [[package]] name = "chrono" version = "0.4.42" @@ -435,6 +561,17 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", + "zeroize", +] + [[package]] name = "clang-sys" version = "1.8.1" @@ -508,6 +645,12 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + [[package]] name = "core-foundation" version = "0.9.4" @@ -543,12 +686,43 @@ dependencies = [ "libc", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + [[package]] name = "crypto-common" version = "0.1.6" @@ -611,6 +785,16 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "zeroize", +] + [[package]] name = "der-parser" version = "10.0.0" @@ -672,7 +856,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", + "const-oid", "crypto-common", + "subtle", ] [[package]] @@ -692,12 +878,61 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "elliptic-curve", + "signature", + "spki", +] + [[package]] name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "env_filter" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +dependencies = [ + "log", +] + +[[package]] +name = "env_logger" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +dependencies = [ + "env_filter", + "log", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -754,10 +989,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] -name = "find-msvc-tools" -version = "0.1.3" +name = "ff" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0399f9d26e5191ce32c498bebd31e7a3ceabc2745f0ac54af3f335126c3f24b3" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" [[package]] name = "fnv" @@ -783,7 +1028,28 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "foreign-types-shared", + "foreign-types-shared 0.1.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -792,6 +1058,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[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" version = "1.2.2" @@ -807,6 +1079,16 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" +[[package]] +name = "fslock" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "futures" version = "0.3.31" @@ -922,12 +1204,13 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", + "zeroize", ] [[package]] @@ -980,6 +1263,17 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "h2" version = "0.4.12" @@ -1074,6 +1368,15 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + [[package]] name = "hot_reload" version = "0.2.0" @@ -1371,6 +1674,15 @@ dependencies = [ "hashbrown 0.16.0", ] +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array", +] + [[package]] name = "intrusive-collections" version = "0.9.7" @@ -1465,6 +1777,9 @@ name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] [[package]] name = "libc" @@ -1619,11 +1934,11 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.50.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -1636,6 +1951,23 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + [[package]] name = "num-conv" version = "0.1.0" @@ -1651,6 +1983,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-rational" version = "0.4.2" @@ -1671,6 +2014,16 @@ dependencies = [ "libm", ] +[[package]] +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + [[package]] name = "object" version = "0.37.3" @@ -1701,6 +2054,12 @@ version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + [[package]] name = "openssl" version = "0.10.73" @@ -1709,7 +2068,7 @@ checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ "bitflags", "cfg-if", - "foreign-types", + "foreign-types 0.3.2", "libc", "once_cell", "openssl-macros", @@ -1763,12 +2122,12 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "pem" -version = "3.0.5" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ "base64", - "serde", + "serde_core", ] [[package]] @@ -1800,6 +2159,27 @@ dependencies = [ "futures-io", ] +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + [[package]] name = "pkg-config" version = "0.3.32" @@ -1820,6 +2200,17 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug", + "universal-hash", +] + [[package]] name = "potential_utf" version = "0.1.3" @@ -1955,6 +2346,16 @@ dependencies = [ "rand_hc", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + [[package]] name = "rand" version = "0.9.2" @@ -1975,6 +2376,16 @@ dependencies = [ "rand_core 0.5.1", ] +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + [[package]] name = "rand_chacha" version = "0.9.0" @@ -1994,6 +2405,15 @@ dependencies = [ "getrandom 0.1.16", ] +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + [[package]] name = "rand_core" version = "0.9.3" @@ -2012,6 +2432,26 @@ dependencies = [ "rand_core 0.5.1", ] +[[package]] +name = "rayon" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "rcgen" version = "0.14.5" @@ -2028,9 +2468,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.3" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" +checksum = "4a52d8d02cacdb176ef4678de6c052efb4b3da14b78e4db683a4252762be5433" dependencies = [ "aho-corasick", "memchr", @@ -2040,9 +2480,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" +checksum = "722166aa0d7438abbaa4d5cc2c649dac844e8c56d82fb3d33e9c34b5cd268fc6" dependencies = [ "aho-corasick", "memchr", @@ -2051,9 +2491,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +checksum = "c3160422bbd54dd5ecfdca71e5fd59b7b8fe2b1697ab2baf64f6d05dcc66d298" [[package]] name = "ring" @@ -2123,7 +2563,7 @@ dependencies = [ "hot_reload", "rustls", "rustls-post-quantum", - "rustls-webpki", + "rustls-webpki 0.103.7", "thiserror 2.0.17", "tokio", "tracing", @@ -2138,6 +2578,7 @@ dependencies = [ "anyhow", "async-trait", "base64", + "boring-rustls-provider", "bytes", "chrono", "derive_builder", @@ -2161,7 +2602,10 @@ dependencies = [ "rpxy-acme", "rpxy-certs", "rustls", + "rustls-openssl", "rustls-post-quantum", + "rustls-symcrypt", + "rustls-wolfcrypt-provider", "s2n-quic", "s2n-quic-core", "s2n-quic-h3", @@ -2176,6 +2620,27 @@ dependencies = [ "tracing", ] +[[package]] +name = "rsa" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" +dependencies = [ + "const-oid", + "digest", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "sha2", + "signature", + "spki", + "subtle", + "zeroize", +] + [[package]] name = "rustc-demangle" version = "0.1.26" @@ -2221,7 +2686,7 @@ dependencies = [ "once_cell", "ring", "rustls-pki-types", - "rustls-webpki", + "rustls-webpki 0.103.7", "subtle", "zeroize", ] @@ -2262,6 +2727,29 @@ dependencies = [ "security-framework 3.5.1", ] +[[package]] +name = "rustls-openssl" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f161084062dd5a443adfb0de9bbfab62699333e2d8424ca91da5f22ec88d1" +dependencies = [ + "foreign-types 0.3.2", + "once_cell", + "openssl", + "openssl-sys", + "rustls", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "rustls-pki-types" version = "1.12.0" @@ -2286,7 +2774,7 @@ dependencies = [ "rustls", "rustls-native-certs", "rustls-platform-verifier-android", - "rustls-webpki", + "rustls-webpki 0.103.7", "security-framework 3.5.1", "security-framework-sys", "webpki-root-certs", @@ -2307,7 +2795,33 @@ checksum = "0da3cd9229bac4fae1f589c8f875b3c891a058ddaa26eb3bde16b5e43dc174ce" dependencies = [ "aws-lc-rs", "rustls", - "rustls-webpki", + "rustls-webpki 0.103.7", +] + +[[package]] +name = "rustls-symcrypt" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1aa1fbe108897452967f5de83014edf2e42606f09283c4ba1f671904098fcbc" +dependencies = [ + "der", + "pkcs1", + "pkcs8", + "rustls", + "rustls-webpki 0.102.8", + "sec1", + "symcrypt", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted 0.9.0", ] [[package]] @@ -2322,6 +2836,37 @@ dependencies = [ "untrusted 0.9.0", ] +[[package]] +name = "rustls-wolfcrypt-provider" +version = "0.1.0" +source = "git+https://github.com/wolfSSL/rustls-wolfcrypt-provider.git?rev=dfcdbfdba3a988494503886151f732ee0bd56c7d#dfcdbfdba3a988494503886151f732ee0bd56c7d" +dependencies = [ + "anyhow", + "chacha20poly1305", + "der", + "ecdsa", + "env_logger", + "foreign-types 0.5.0", + "hex", + "hex-literal", + "hmac", + "lazy_static", + "log", + "num_cpus", + "pkcs8", + "rand_core 0.6.4", + "rayon", + "rsa", + "rustls", + "rustls-pemfile", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "sha2", + "signature", + "wolfcrypt-rs", + "wycheproof", +] + [[package]] name = "rustversion" version = "1.0.22" @@ -2336,7 +2881,7 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "s2n-codec" -version = "0.67.0" +version = "0.66.0" dependencies = [ "byteorder", "bytes", @@ -2345,7 +2890,7 @@ dependencies = [ [[package]] name = "s2n-quic" -version = "1.67.0" +version = "1.66.0" dependencies = [ "bytes", "cfg-if", @@ -2368,7 +2913,7 @@ dependencies = [ [[package]] name = "s2n-quic-core" -version = "0.67.0" +version = "0.66.0" dependencies = [ "atomic-waker", "byteorder", @@ -2387,7 +2932,7 @@ dependencies = [ [[package]] name = "s2n-quic-crypto" -version = "0.67.0" +version = "0.66.0" dependencies = [ "aws-lc-rs", "cfg-if", @@ -2410,7 +2955,7 @@ dependencies = [ [[package]] name = "s2n-quic-platform" -version = "0.67.0" +version = "0.66.0" dependencies = [ "cfg-if", "futures", @@ -2423,11 +2968,11 @@ dependencies = [ [[package]] name = "s2n-quic-rustls" -version = "0.67.0" +version = "0.66.0" dependencies = [ "bytes", "rustls", - "rustls-pki-types", + "rustls-pemfile", "rustls-post-quantum", "s2n-codec", "s2n-quic-core", @@ -2436,7 +2981,7 @@ dependencies = [ [[package]] name = "s2n-quic-tls" -version = "0.67.0" +version = "0.66.0" dependencies = [ "bytes", "errno", @@ -2449,7 +2994,7 @@ dependencies = [ [[package]] name = "s2n-quic-tls-default" -version = "0.67.0" +version = "0.66.0" dependencies = [ "s2n-quic-rustls", "s2n-quic-tls", @@ -2457,7 +3002,7 @@ dependencies = [ [[package]] name = "s2n-quic-transport" -version = "0.67.0" +version = "0.66.0" dependencies = [ "bytes", "futures-channel", @@ -2513,6 +3058,20 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + [[package]] name = "security-framework" version = "2.11.1" @@ -2637,6 +3196,16 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core 0.6.4", +] + [[package]] name = "siphasher" version = "1.0.1" @@ -2657,12 +3226,28 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", ] [[package]] @@ -2683,6 +3268,26 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +[[package]] +name = "symcrypt" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45f6e93e13900bae533f1f347c82d2fcf9d7ad7fffd7e58bc9fbd1b68575ca1c" +dependencies = [ + "lazy_static", + "libc", + "symcrypt-sys", +] + +[[package]] +name = "symcrypt-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0878df9feb068709a68ccdb5cc3201649201e79e823566863f6ca4db4b9201aa" +dependencies = [ + "libc", +] + [[package]] name = "syn" version = "2.0.106" @@ -3057,6 +3662,16 @@ version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + [[package]] name = "untrusted" version = "0.7.1" @@ -3256,6 +3871,22 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + [[package]] name = "winapi-util" version = "0.1.11" @@ -3265,6 +3896,12 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + [[package]] name = "windows-core" version = "0.62.2" @@ -3602,12 +4239,31 @@ version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +[[package]] +name = "wolfcrypt-rs" +version = "0.1.0" +source = "git+https://github.com/wolfSSL/rustls-wolfcrypt-provider.git?rev=dfcdbfdba3a988494503886151f732ee0bd56c7d#dfcdbfdba3a988494503886151f732ee0bd56c7d" +dependencies = [ + "bindgen 0.71.1", +] + [[package]] name = "writeable" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +[[package]] +name = "wycheproof" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb3be19abfb206c6adcbdf2007b09b0e8ca1f6530db40c03b42ce8ed4719894" +dependencies = [ + "data-encoding", + "serde", + "serde_json", +] + [[package]] name = "x509-parser" version = "0.18.0" diff --git a/rpxy-bin/Cargo.toml b/rpxy-bin/Cargo.toml index 939e4a2..4238701 100644 --- a/rpxy-bin/Cargo.toml +++ b/rpxy-bin/Cargo.toml @@ -14,12 +14,13 @@ publish.workspace = true [features] default = [ - "http3-quinn", + "provider-ring", +# "http3-quinn", "cache", "rustls-backend", "sticky-cookie", - "acme", - "post-quantum", +# "acme", +# "post-quantum", ] # default = [ # "http3-s2n", @@ -29,6 +30,12 @@ default = [ # "acme", # "post-quantum", # ] +provider-aws-lc-rs = ["rpxy-lib/rustls-backend-aws-lc-rs"] +provider-boring = ["rpxy-lib/rustls-backend-boring"] +provider-openssl = ["rpxy-lib/rustls-backend-openssl"] +provider-ring = ["rpxy-lib/rustls-backend-ring"] +provider-symcrypt = ["rpxy-lib/rustls-backend-symcrypt"] +provider-wolfcrypt = ["rpxy-lib/rustls-backend-wolfcrypt"] http3-quinn = ["rpxy-lib/http3-quinn"] http3-s2n = ["rpxy-lib/http3-s2n"] native-tls-backend = ["rpxy-lib/native-tls-backend"] diff --git a/rpxy-bin/src/config/toml.rs b/rpxy-bin/src/config/toml.rs index 2a7aff6..913f18d 100644 --- a/rpxy-bin/src/config/toml.rs +++ b/rpxy-bin/src/config/toml.rs @@ -173,6 +173,7 @@ pub struct ReverseProxyOption { pub upstream: Vec, pub upstream_options: Option>, pub load_balance: Option, + pub set_host: Option, } #[derive(Deserialize, Debug, Default, PartialEq, Eq, Clone)] @@ -398,6 +399,7 @@ impl TryInto> for &Application { upstream, upstream_options: rpo.upstream_options.clone(), load_balance: rpo.load_balance.clone(), + set_host: rpo.set_host.clone(), }) } diff --git a/rpxy-lib/Cargo.toml b/rpxy-lib/Cargo.toml index 081afb6..f30ed16 100644 --- a/rpxy-lib/Cargo.toml +++ b/rpxy-lib/Cargo.toml @@ -13,6 +13,8 @@ publish.workspace = true # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [features] +#default = ["rustls-backend", "rustls-backend-aws-lc-rs"] + http3-quinn = ["socket2", "quinn", "h3", "h3-quinn", "rpxy-certs/http3"] http3-s2n = [ "s2n-quic", @@ -26,6 +28,12 @@ cache = ["http-cache-semantics", "lru", "sha2", "base64"] sticky-cookie = ["base64", "sha2", "chrono"] native-tls-backend = ["hyper-tls"] rustls-backend = ["hyper-rustls"] +rustls-backend-aws-lc-rs = ["hyper-rustls/aws-lc-rs"] +rustls-backend-boring = ["hyper-rustls/aws-lc-rs", "boring-rustls-provider"] +rustls-backend-openssl = ["hyper-rustls/aws-lc-rs", "rustls-openssl"] +rustls-backend-ring = ["hyper-rustls/ring"] +rustls-backend-symcrypt = ["hyper-rustls/aws-lc-rs", "rustls-symcrypt"] +rustls-backend-wolfcrypt = ["hyper-rustls/aws-lc-rs", "rustls-wolfcrypt-provider"] webpki-roots = ["rustls-backend", "hyper-rustls/webpki-tokio"] acme = ["dep:rpxy-acme"] post-quantum = [ @@ -71,7 +79,6 @@ hyper-tls = { version = "0.6.0", features = [ "vendored", ], optional = true } hyper-rustls = { version = "0.27.7", default-features = false, features = [ - "aws-lc-rs", "http1", "http2", "rustls-platform-verifier", @@ -81,7 +88,11 @@ hyper-rustls = { version = "0.27.7", default-features = false, features = [ rpxy-certs = { path = "../rpxy-certs/", default-features = false } hot_reload = "0.2.0" rustls = { version = "0.23.32", default-features = false } +boring-rustls-provider = { git = "https://github.com/janrueth/boring-rustls-provider.git", rev = "490340afa77e2c08fc45853124f99d49f4f9f8a0", optional = true } +rustls-openssl = { version = "0.3.0", default-features = false, optional = true } rustls-post-quantum = { version = "0.2.4", optional = true } +rustls-symcrypt = { version = "0.2.1", optional = true, features = ["chacha", "x25519"] } +rustls-wolfcrypt-provider = { git = "https://github.com/wolfSSL/rustls-wolfcrypt-provider.git", rev = "dfcdbfdba3a988494503886151f732ee0bd56c7d", optional = true } tokio-rustls = { version = "0.26.4", features = ["early-data"] } # acme @@ -94,11 +105,11 @@ tracing = { version = "0.1.41" } quinn = { version = "0.11.9", optional = true } h3 = { version = "0.0.8", features = ["tracing"], optional = true } h3-quinn = { version = "0.0.10", optional = true } -s2n-quic = { version = "1.67.0", path = "../submodules/s2n-quic/quic/s2n-quic/", default-features = false, features = [ +s2n-quic = { path = "../submodules/s2n-quic/quic/s2n-quic/", default-features = false, features = [ "provider-tls-rustls", ], optional = true } -s2n-quic-core = { version = "0.67.0", path = "../submodules/s2n-quic/quic/s2n-quic-core", default-features = false, optional = true } -s2n-quic-rustls = { version = "0.67.0", path = "../submodules/s2n-quic/quic/s2n-quic-rustls", optional = true } +s2n-quic-core = { path = "../submodules/s2n-quic/quic/s2n-quic-core", default-features = false, optional = true } +s2n-quic-rustls = { path = "../submodules/s2n-quic/quic/s2n-quic-rustls", optional = true } s2n-quic-h3 = { path = "../submodules/s2n-quic/quic/s2n-quic-h3/", features = [ "tracing", ], optional = true } diff --git a/rpxy-lib/src/backend/upstream.rs b/rpxy-lib/src/backend/upstream.rs index 9760d58..eae0c4f 100644 --- a/rpxy-lib/src/backend/upstream.rs +++ b/rpxy-lib/src/backend/upstream.rs @@ -40,6 +40,7 @@ impl TryFrom<&AppConfig> for PathManager { .replace_path(&rpc.replace_path) .load_balance(&rpc.load_balance, &upstream_vec, &app_config.server_name, &rpc.path) .options(&rpc.upstream_options) + .set_host(&rpc.set_host) .build() .unwrap(); inner.insert(elem.path.clone(), elem); @@ -137,6 +138,9 @@ pub struct UpstreamCandidates { #[builder(setter(custom), default)] /// Activated upstream options defined in [[UpstreamOption]] pub options: HashSet, + + #[builder(setter(custom), default)] + pub set_host: Option, } impl UpstreamCandidatesBuilder { @@ -218,6 +222,10 @@ impl UpstreamCandidatesBuilder { self.options = Some(opts); self } + pub fn set_host(&mut self, set_host: &Option) -> &mut Self { + self.set_host = Some(set_host.clone()); + self + } } impl UpstreamCandidates { diff --git a/rpxy-lib/src/forwarder/client.rs b/rpxy-lib/src/forwarder/client.rs index 329e033..df4cab8 100644 --- a/rpxy-lib/src/forwarder/client.rs +++ b/rpxy-lib/src/forwarder/client.rs @@ -103,6 +103,7 @@ where ::Error: Into>, { async fn request_directly(&self, req: Request) -> RpxyResult> { + debug!("About to send request with Host header: {}", req.headers().get(hyper::header::HOST).unwrap().to_str().unwrap()); // TODO: This 'match' condition is always evaluated at every 'request' invocation. So, it is inefficient. // Needs to be reconsidered. Currently, this is a kind of work around. // This possibly relates to https://github.com/hyperium/hyper/issues/2417. @@ -228,6 +229,7 @@ where let inner = Client::builder(LocalExecutor::new(_globals.runtime_handle.clone())).build::<_, B1>(connector); let inner_h2 = Client::builder(LocalExecutor::new(_globals.runtime_handle.clone())) .http2_only(true) + .set_host(false) .build::<_, B1>(connector_h2); Ok(Self { diff --git a/rpxy-lib/src/globals.rs b/rpxy-lib/src/globals.rs index c25483f..7a189fa 100644 --- a/rpxy-lib/src/globals.rs +++ b/rpxy-lib/src/globals.rs @@ -153,6 +153,7 @@ pub struct ReverseProxyConfig { pub upstream: Vec, pub upstream_options: Option>, pub load_balance: Option, + pub set_host: Option, } /// Configuration parameters for single upstream destination from a reverse proxy diff --git a/rpxy-lib/src/lib.rs b/rpxy-lib/src/lib.rs index 77c5b93..c2628c9 100644 --- a/rpxy-lib/src/lib.rs +++ b/rpxy-lib/src/lib.rs @@ -100,13 +100,43 @@ pub async fn entrypoint( info!("Cache is disabled") } - #[cfg(not(feature = "post-quantum"))] - // Install aws_lc_rs as default crypto provider for rustls - let _ = CryptoProvider::install_default(rustls::crypto::aws_lc_rs::default_provider()); + // Ensure multiple provider cannot be enabled without compile error. + let _provider; + #[cfg(feature = "rustls-backend-aws-lc-rs")] + { + info!("Using RusTLS provider aws-lc-rs"); + _provider = CryptoProvider::install_default(rustls::crypto::aws_lc_rs::default_provider()); + } + #[cfg(feature = "rustls-backend-boring")] + { + info!("Using RusTLS provider boring"); + _provider = CryptoProvider::install_default(boring_rustls_provider::provider()); + } + #[cfg(feature = "rustls-backend-openssl")] + { + info!("Using RusTLS provider openssl"); + _provider = CryptoProvider::install_default(rustls_openssl::default_provider()); + } #[cfg(feature = "post-quantum")] - let _ = CryptoProvider::install_default(rustls_post_quantum::provider()); - #[cfg(feature = "post-quantum")] - info!("Post-quantum crypto provider is installed"); + { + info!("Using RusTLS provider post_quantum"); + _provider = CryptoProvider::install_default(rustls_post_quantum::provider()); + } + #[cfg(feature = "rustls-backend-ring")] + { + info!("Using RusTLS provider ring"); + _provider = CryptoProvider::install_default(rustls::crypto::ring::default_provider()); + } + #[cfg(feature = "rustls-backend-symcrypt")] + { + info!("Using RusTLS provider symcrypt"); + _provider = CryptoProvider::install_default(rustls_symcrypt::default_symcrypt_provider()); + } + #[cfg(feature = "rustls-backend-wolfcrypt")] + { + info!("Using RusTLS provider wolfcrypt"); + _provider = CryptoProvider::install_default(rustls_wolfcrypt_provider::provider()); + } // 1. build backends, and make it contained in Arc let app_manager = Arc::new(backend::BackendAppManager::try_from(app_config_list)?); diff --git a/rpxy-lib/src/message_handler/handler_manipulate_messages.rs b/rpxy-lib/src/message_handler/handler_manipulate_messages.rs index 08227f7..56aa3d3 100644 --- a/rpxy-lib/src/message_handler/handler_manipulate_messages.rs +++ b/rpxy-lib/src/message_handler/handler_manipulate_messages.rs @@ -168,6 +168,12 @@ where // can update request line i.e., http version, only if not upgrade (http 1.1) update_request_line(req, upstream_chosen, upstream_candidates)?; } + + if let Some(set_host) = &upstream_candidates.set_host { + if let Some(host) = req.headers_mut().get_mut(&header::HOST) { + *host = HeaderValue::from_str(set_host).unwrap(); + } + } Ok(context) } diff --git a/rpxy-lib/src/message_handler/utils_headers.rs b/rpxy-lib/src/message_handler/utils_headers.rs index 21e26ce..972652d 100644 --- a/rpxy-lib/src/message_handler/utils_headers.rs +++ b/rpxy-lib/src/message_handler/utils_headers.rs @@ -371,7 +371,8 @@ pub(super) fn host_from_uri_or_host_header(uri: &Uri, host_header_value: Option< // Prioritize uri host over host header let uri_host = uri.host().map(|host| { if let Some(port) = uri.port_u16() { - format!("{}:{}", host, port) + //format!("{}:{}", host, port) + host.to_string() } else { host.to_string() } diff --git a/submodules/s2n-quic b/submodules/s2n-quic index 687df96..19d80dc 160000 --- a/submodules/s2n-quic +++ b/submodules/s2n-quic @@ -1 +1 @@ -Subproject commit 687df9619843a335b64e46f20091bda45b054d8e +Subproject commit 19d80dc650f30d2488f97e5cc0f4935927908782