mirror of
https://github.com/neondatabase/neon.git
synced 2025-12-23 06:09:59 +00:00
update rustls (#9396)
The forever ongoing effort of juggling multiple versions of rustls :3 now with new crypto library aws-lc. Because of dependencies, it is currently impossible to not have both ring and aws-lc in the dep tree, therefore our only options are not updating rustls or having both crypto backends enabled... According to benchmarks run by the rustls maintainer, aws-lc is faster than ring in some cases too <https://jbp.io/graviola/>, so it's not without its upsides,
This commit is contained in:
220
Cargo.lock
generated
220
Cargo.lock
generated
@@ -148,9 +148,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "asn1-rs"
|
name = "asn1-rs"
|
||||||
version = "0.5.2"
|
version = "0.6.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0"
|
checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"asn1-rs-derive",
|
"asn1-rs-derive",
|
||||||
"asn1-rs-impl",
|
"asn1-rs-impl",
|
||||||
@@ -164,25 +164,25 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "asn1-rs-derive"
|
name = "asn1-rs-derive"
|
||||||
version = "0.4.0"
|
version = "0.5.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c"
|
checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 1.0.109",
|
"syn 2.0.52",
|
||||||
"synstructure",
|
"synstructure",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "asn1-rs-impl"
|
name = "asn1-rs-impl"
|
||||||
version = "0.1.0"
|
version = "0.2.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed"
|
checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 1.0.109",
|
"syn 2.0.52",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -310,6 +310,33 @@ dependencies = [
|
|||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aws-lc-rs"
|
||||||
|
version = "1.9.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2f95446d919226d587817a7d21379e6eb099b97b45110a7f272a444ca5c54070"
|
||||||
|
dependencies = [
|
||||||
|
"aws-lc-sys",
|
||||||
|
"mirai-annotations",
|
||||||
|
"paste",
|
||||||
|
"zeroize",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aws-lc-sys"
|
||||||
|
version = "0.21.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b3ddc4a5b231dd6958b140ff3151b6412b3f4321fab354f399eec8f14b06df62"
|
||||||
|
dependencies = [
|
||||||
|
"bindgen 0.69.5",
|
||||||
|
"cc",
|
||||||
|
"cmake",
|
||||||
|
"dunce",
|
||||||
|
"fs_extra",
|
||||||
|
"libc",
|
||||||
|
"paste",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "aws-runtime"
|
name = "aws-runtime"
|
||||||
version = "1.4.3"
|
version = "1.4.3"
|
||||||
@@ -595,7 +622,7 @@ dependencies = [
|
|||||||
"once_cell",
|
"once_cell",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"pin-utils",
|
"pin-utils",
|
||||||
"rustls 0.21.11",
|
"rustls 0.21.12",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tracing",
|
"tracing",
|
||||||
]
|
]
|
||||||
@@ -915,6 +942,29 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bindgen"
|
||||||
|
version = "0.69.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 2.4.1",
|
||||||
|
"cexpr",
|
||||||
|
"clang-sys",
|
||||||
|
"itertools 0.10.5",
|
||||||
|
"lazy_static",
|
||||||
|
"lazycell",
|
||||||
|
"log",
|
||||||
|
"prettyplease",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"regex",
|
||||||
|
"rustc-hash",
|
||||||
|
"shlex",
|
||||||
|
"syn 2.0.52",
|
||||||
|
"which",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bindgen"
|
name = "bindgen"
|
||||||
version = "0.70.1"
|
version = "0.70.1"
|
||||||
@@ -924,7 +974,7 @@ dependencies = [
|
|||||||
"bitflags 2.4.1",
|
"bitflags 2.4.1",
|
||||||
"cexpr",
|
"cexpr",
|
||||||
"clang-sys",
|
"clang-sys",
|
||||||
"itertools 0.12.1",
|
"itertools 0.10.5",
|
||||||
"log",
|
"log",
|
||||||
"prettyplease",
|
"prettyplease",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
@@ -1038,12 +1088,13 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.0.83"
|
version = "1.1.30"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
|
checksum = "b16803a61b81d9eabb7eae2588776c4c1e584b738ede45fdbb4c972cec1e9945"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"jobserver",
|
"jobserver",
|
||||||
"libc",
|
"libc",
|
||||||
|
"shlex",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1169,6 +1220,15 @@ version = "0.5.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
|
checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cmake"
|
||||||
|
version = "0.1.51"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fb1e43aa7fd152b1f968787f7dbcdeb306d1867ff373c69955211876c053f91a"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "colorchoice"
|
name = "colorchoice"
|
||||||
version = "1.0.0"
|
version = "1.0.0"
|
||||||
@@ -1624,9 +1684,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "der-parser"
|
name = "der-parser"
|
||||||
version = "8.2.0"
|
version = "9.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e"
|
checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"asn1-rs",
|
"asn1-rs",
|
||||||
"displaydoc",
|
"displaydoc",
|
||||||
@@ -1755,6 +1815,12 @@ dependencies = [
|
|||||||
"syn 2.0.52",
|
"syn 2.0.52",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dunce"
|
||||||
|
version = "1.0.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dyn-clone"
|
name = "dyn-clone"
|
||||||
version = "1.0.14"
|
version = "1.0.14"
|
||||||
@@ -2059,6 +2125,12 @@ dependencies = [
|
|||||||
"tokio-util",
|
"tokio-util",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fs_extra"
|
||||||
|
version = "1.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fsevent-sys"
|
name = "fsevent-sys"
|
||||||
version = "4.1.0"
|
version = "4.1.0"
|
||||||
@@ -2412,6 +2484,15 @@ dependencies = [
|
|||||||
"digest",
|
"digest",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "home"
|
||||||
|
version = "0.5.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5"
|
||||||
|
dependencies = [
|
||||||
|
"windows-sys 0.52.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hostname"
|
name = "hostname"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
@@ -2581,7 +2662,7 @@ dependencies = [
|
|||||||
"http 0.2.9",
|
"http 0.2.9",
|
||||||
"hyper 0.14.30",
|
"hyper 0.14.30",
|
||||||
"log",
|
"log",
|
||||||
"rustls 0.21.11",
|
"rustls 0.21.12",
|
||||||
"rustls-native-certs 0.6.2",
|
"rustls-native-certs 0.6.2",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-rustls 0.24.0",
|
"tokio-rustls 0.24.0",
|
||||||
@@ -2801,9 +2882,9 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "jobserver"
|
name = "jobserver"
|
||||||
version = "0.1.26"
|
version = "0.1.32"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
|
checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
@@ -2907,6 +2988,12 @@ dependencies = [
|
|||||||
"spin",
|
"spin",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lazycell"
|
||||||
|
version = "1.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.150"
|
version = "0.2.150"
|
||||||
@@ -3137,6 +3224,12 @@ dependencies = [
|
|||||||
"windows-sys 0.48.0",
|
"windows-sys 0.48.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "mirai-annotations"
|
||||||
|
version = "1.12.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "multimap"
|
name = "multimap"
|
||||||
version = "0.8.3"
|
version = "0.8.3"
|
||||||
@@ -3356,9 +3449,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oid-registry"
|
name = "oid-registry"
|
||||||
version = "0.6.1"
|
version = "0.7.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff"
|
checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"asn1-rs",
|
"asn1-rs",
|
||||||
]
|
]
|
||||||
@@ -4053,14 +4146,14 @@ dependencies = [
|
|||||||
"bytes",
|
"bytes",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"pq_proto",
|
"pq_proto",
|
||||||
"rustls 0.22.4",
|
"rustls 0.23.7",
|
||||||
"rustls-pemfile 2.1.1",
|
"rustls-pemfile 2.1.1",
|
||||||
"serde",
|
"serde",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-postgres",
|
"tokio-postgres",
|
||||||
"tokio-postgres-rustls",
|
"tokio-postgres-rustls",
|
||||||
"tokio-rustls 0.25.0",
|
"tokio-rustls 0.26.0",
|
||||||
"tokio-util",
|
"tokio-util",
|
||||||
"tracing",
|
"tracing",
|
||||||
]
|
]
|
||||||
@@ -4082,7 +4175,7 @@ name = "postgres_ffi"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bindgen",
|
"bindgen 0.70.1",
|
||||||
"bytes",
|
"bytes",
|
||||||
"crc32c",
|
"crc32c",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
@@ -4219,7 +4312,7 @@ checksum = "0c1318b19085f08681016926435853bbf7858f9c082d0999b80550ff5d9abe15"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"heck 0.5.0",
|
"heck 0.5.0",
|
||||||
"itertools 0.12.1",
|
"itertools 0.10.5",
|
||||||
"log",
|
"log",
|
||||||
"multimap",
|
"multimap",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
@@ -4239,7 +4332,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5"
|
checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"itertools 0.12.1",
|
"itertools 0.10.5",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.52",
|
"syn 2.0.52",
|
||||||
@@ -4327,8 +4420,8 @@ dependencies = [
|
|||||||
"rsa",
|
"rsa",
|
||||||
"rstest",
|
"rstest",
|
||||||
"rustc-hash",
|
"rustc-hash",
|
||||||
"rustls 0.22.4",
|
"rustls 0.23.7",
|
||||||
"rustls-native-certs 0.7.0",
|
"rustls-native-certs 0.8.0",
|
||||||
"rustls-pemfile 2.1.1",
|
"rustls-pemfile 2.1.1",
|
||||||
"scopeguard",
|
"scopeguard",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -4345,7 +4438,7 @@ dependencies = [
|
|||||||
"tokio",
|
"tokio",
|
||||||
"tokio-postgres",
|
"tokio-postgres",
|
||||||
"tokio-postgres-rustls",
|
"tokio-postgres-rustls",
|
||||||
"tokio-rustls 0.25.0",
|
"tokio-rustls 0.26.0",
|
||||||
"tokio-tungstenite",
|
"tokio-tungstenite",
|
||||||
"tokio-util",
|
"tokio-util",
|
||||||
"tracing",
|
"tracing",
|
||||||
@@ -4509,12 +4602,13 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rcgen"
|
name = "rcgen"
|
||||||
version = "0.12.1"
|
version = "0.13.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "48406db8ac1f3cbc7dcdb56ec355343817958a356ff430259bb07baf7607e1e1"
|
checksum = "54077e1872c46788540de1ea3d7f4ccb1983d12f9aa909b234468676c1a36779"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"pem",
|
"pem",
|
||||||
"ring",
|
"ring",
|
||||||
|
"rustls-pki-types",
|
||||||
"time",
|
"time",
|
||||||
"yasna",
|
"yasna",
|
||||||
]
|
]
|
||||||
@@ -4693,7 +4787,7 @@ dependencies = [
|
|||||||
"once_cell",
|
"once_cell",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"rustls 0.21.11",
|
"rustls 0.21.12",
|
||||||
"rustls-pemfile 1.0.2",
|
"rustls-pemfile 1.0.2",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
@@ -4991,9 +5085,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustls"
|
name = "rustls"
|
||||||
version = "0.21.11"
|
version = "0.21.12"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7fecbfb7b1444f477b345853b1fce097a2c6fb637b2bfb87e6bc5db0f043fae4"
|
checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"ring",
|
"ring",
|
||||||
@@ -5021,6 +5115,7 @@ version = "0.23.7"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ebbbdb961df0ad3f2652da8f3fdc4b36122f568f968f45ad3316f26c025c677b"
|
checksum = "ebbbdb961df0ad3f2652da8f3fdc4b36122f568f968f45ad3316f26c025c677b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"aws-lc-rs",
|
||||||
"log",
|
"log",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"ring",
|
"ring",
|
||||||
@@ -5089,9 +5184,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustls-pki-types"
|
name = "rustls-pki-types"
|
||||||
version = "1.3.1"
|
version = "1.10.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5ede67b28608b4c60685c7d54122d4400d90f62b40caee7700e700380a390fa8"
|
checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustls-webpki"
|
name = "rustls-webpki"
|
||||||
@@ -5109,6 +5204,7 @@ version = "0.102.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610"
|
checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"aws-lc-rs",
|
||||||
"ring",
|
"ring",
|
||||||
"rustls-pki-types",
|
"rustls-pki-types",
|
||||||
"untrusted",
|
"untrusted",
|
||||||
@@ -5312,7 +5408,7 @@ checksum = "00421ed8fa0c995f07cde48ba6c89e80f2b312f74ff637326f392fbfd23abe02"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"httpdate",
|
"httpdate",
|
||||||
"reqwest 0.12.4",
|
"reqwest 0.12.4",
|
||||||
"rustls 0.21.11",
|
"rustls 0.21.12",
|
||||||
"sentry-backtrace",
|
"sentry-backtrace",
|
||||||
"sentry-contexts",
|
"sentry-contexts",
|
||||||
"sentry-core",
|
"sentry-core",
|
||||||
@@ -5807,8 +5903,8 @@ dependencies = [
|
|||||||
"postgres_ffi",
|
"postgres_ffi",
|
||||||
"remote_storage",
|
"remote_storage",
|
||||||
"reqwest 0.12.4",
|
"reqwest 0.12.4",
|
||||||
"rustls 0.22.4",
|
"rustls 0.23.7",
|
||||||
"rustls-native-certs 0.7.0",
|
"rustls-native-certs 0.8.0",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"storage_controller_client",
|
"storage_controller_client",
|
||||||
@@ -5930,14 +6026,13 @@ checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "synstructure"
|
name = "synstructure"
|
||||||
version = "0.12.6"
|
version = "0.13.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
|
checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 1.0.109",
|
"syn 2.0.52",
|
||||||
"unicode-xid",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -6236,16 +6331,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio-postgres-rustls"
|
name = "tokio-postgres-rustls"
|
||||||
version = "0.11.1"
|
version = "0.12.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0ea13f22eda7127c827983bdaf0d7fff9df21c8817bab02815ac277a21143677"
|
checksum = "04fb792ccd6bbcd4bba408eb8a292f70fc4a3589e5d793626f45190e6454b6ab"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures",
|
|
||||||
"ring",
|
"ring",
|
||||||
"rustls 0.22.4",
|
"rustls 0.23.7",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-postgres",
|
"tokio-postgres",
|
||||||
"tokio-rustls 0.25.0",
|
"tokio-rustls 0.26.0",
|
||||||
"x509-certificate",
|
"x509-certificate",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -6255,7 +6349,7 @@ version = "0.24.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e0d409377ff5b1e3ca6437aa86c1eb7d40c134bfec254e44c830defa92669db5"
|
checksum = "e0d409377ff5b1e3ca6437aa86c1eb7d40c134bfec254e44c830defa92669db5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"rustls 0.21.11",
|
"rustls 0.21.12",
|
||||||
"tokio",
|
"tokio",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -6678,16 +6772,15 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ureq"
|
name = "ureq"
|
||||||
version = "2.9.7"
|
version = "2.10.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d11a831e3c0b56e438a28308e7c810799e3c118417f342d30ecec080105395cd"
|
checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
"log",
|
"log",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"rustls 0.22.4",
|
"rustls 0.23.7",
|
||||||
"rustls-pki-types",
|
"rustls-pki-types",
|
||||||
"rustls-webpki 0.102.2",
|
|
||||||
"url",
|
"url",
|
||||||
"webpki-roots 0.26.1",
|
"webpki-roots 0.26.1",
|
||||||
]
|
]
|
||||||
@@ -6876,7 +6969,7 @@ name = "walproposer"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bindgen",
|
"bindgen 0.70.1",
|
||||||
"postgres_ffi",
|
"postgres_ffi",
|
||||||
"utils",
|
"utils",
|
||||||
]
|
]
|
||||||
@@ -7051,6 +7144,18 @@ dependencies = [
|
|||||||
"rustls-pki-types",
|
"rustls-pki-types",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "which"
|
||||||
|
version = "4.4.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
|
||||||
|
dependencies = [
|
||||||
|
"either",
|
||||||
|
"home",
|
||||||
|
"once_cell",
|
||||||
|
"rustix",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "whoami"
|
name = "whoami"
|
||||||
version = "1.5.1"
|
version = "1.5.1"
|
||||||
@@ -7295,7 +7400,6 @@ dependencies = [
|
|||||||
"digest",
|
"digest",
|
||||||
"either",
|
"either",
|
||||||
"fail",
|
"fail",
|
||||||
"futures",
|
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-executor",
|
"futures-executor",
|
||||||
"futures-io",
|
"futures-io",
|
||||||
@@ -7311,7 +7415,7 @@ dependencies = [
|
|||||||
"hyper-util",
|
"hyper-util",
|
||||||
"indexmap 1.9.3",
|
"indexmap 1.9.3",
|
||||||
"indexmap 2.0.1",
|
"indexmap 2.0.1",
|
||||||
"itertools 0.12.1",
|
"itertools 0.10.5",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log",
|
||||||
@@ -7332,6 +7436,8 @@ dependencies = [
|
|||||||
"regex-automata 0.4.3",
|
"regex-automata 0.4.3",
|
||||||
"regex-syntax 0.8.2",
|
"regex-syntax 0.8.2",
|
||||||
"reqwest 0.12.4",
|
"reqwest 0.12.4",
|
||||||
|
"rustls 0.23.7",
|
||||||
|
"rustls-webpki 0.102.2",
|
||||||
"scopeguard",
|
"scopeguard",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
@@ -7340,7 +7446,6 @@ dependencies = [
|
|||||||
"smallvec",
|
"smallvec",
|
||||||
"spki 0.7.3",
|
"spki 0.7.3",
|
||||||
"subtle",
|
"subtle",
|
||||||
"syn 1.0.109",
|
|
||||||
"syn 2.0.52",
|
"syn 2.0.52",
|
||||||
"sync_wrapper 0.1.2",
|
"sync_wrapper 0.1.2",
|
||||||
"tikv-jemalloc-sys",
|
"tikv-jemalloc-sys",
|
||||||
@@ -7348,6 +7453,7 @@ dependencies = [
|
|||||||
"time-macros",
|
"time-macros",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-postgres",
|
"tokio-postgres",
|
||||||
|
"tokio-rustls 0.26.0",
|
||||||
"tokio-stream",
|
"tokio-stream",
|
||||||
"tokio-util",
|
"tokio-util",
|
||||||
"toml_edit",
|
"toml_edit",
|
||||||
@@ -7383,9 +7489,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "x509-parser"
|
name = "x509-parser"
|
||||||
version = "0.15.0"
|
version = "0.16.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bab0c2f54ae1d92f4fcb99c0b7ccf0b1e3451cbd395e5f115ccbdbcb18d4f634"
|
checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"asn1-rs",
|
"asn1-rs",
|
||||||
"data-encoding",
|
"data-encoding",
|
||||||
|
|||||||
12
Cargo.toml
12
Cargo.toml
@@ -142,7 +142,7 @@ reqwest-retry = "0.5"
|
|||||||
routerify = "3"
|
routerify = "3"
|
||||||
rpds = "0.13"
|
rpds = "0.13"
|
||||||
rustc-hash = "1.1.0"
|
rustc-hash = "1.1.0"
|
||||||
rustls = "0.22"
|
rustls = "0.23"
|
||||||
rustls-pemfile = "2"
|
rustls-pemfile = "2"
|
||||||
scopeguard = "1.1"
|
scopeguard = "1.1"
|
||||||
sysinfo = "0.29.2"
|
sysinfo = "0.29.2"
|
||||||
@@ -172,8 +172,8 @@ tikv-jemalloc-ctl = "0.5"
|
|||||||
tokio = { version = "1.17", features = ["macros"] }
|
tokio = { version = "1.17", features = ["macros"] }
|
||||||
tokio-epoll-uring = { git = "https://github.com/neondatabase/tokio-epoll-uring.git" , branch = "main" }
|
tokio-epoll-uring = { git = "https://github.com/neondatabase/tokio-epoll-uring.git" , branch = "main" }
|
||||||
tokio-io-timeout = "1.2.0"
|
tokio-io-timeout = "1.2.0"
|
||||||
tokio-postgres-rustls = "0.11.0"
|
tokio-postgres-rustls = "0.12.0"
|
||||||
tokio-rustls = "0.25"
|
tokio-rustls = "0.26"
|
||||||
tokio-stream = "0.1"
|
tokio-stream = "0.1"
|
||||||
tokio-tar = "0.3"
|
tokio-tar = "0.3"
|
||||||
tokio-util = { version = "0.7.10", features = ["io", "rt"] }
|
tokio-util = { version = "0.7.10", features = ["io", "rt"] }
|
||||||
@@ -192,8 +192,8 @@ url = "2.2"
|
|||||||
urlencoding = "2.1"
|
urlencoding = "2.1"
|
||||||
uuid = { version = "1.6.1", features = ["v4", "v7", "serde"] }
|
uuid = { version = "1.6.1", features = ["v4", "v7", "serde"] }
|
||||||
walkdir = "2.3.2"
|
walkdir = "2.3.2"
|
||||||
rustls-native-certs = "0.7"
|
rustls-native-certs = "0.8"
|
||||||
x509-parser = "0.15"
|
x509-parser = "0.16"
|
||||||
whoami = "1.5.1"
|
whoami = "1.5.1"
|
||||||
|
|
||||||
## TODO replace this with tracing
|
## TODO replace this with tracing
|
||||||
@@ -244,7 +244,7 @@ workspace_hack = { version = "0.1", path = "./workspace_hack/" }
|
|||||||
|
|
||||||
## Build dependencies
|
## Build dependencies
|
||||||
criterion = "0.5.1"
|
criterion = "0.5.1"
|
||||||
rcgen = "0.12"
|
rcgen = "0.13"
|
||||||
rstest = "0.18"
|
rstest = "0.18"
|
||||||
camino-tempfile = "1.0.2"
|
camino-tempfile = "1.0.2"
|
||||||
tonic-build = "0.12"
|
tonic-build = "0.12"
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
use postgres_backend::{AuthType, Handler, PostgresBackend, QueryError};
|
use postgres_backend::{AuthType, Handler, PostgresBackend, QueryError};
|
||||||
use pq_proto::{BeMessage, RowDescriptor};
|
use pq_proto::{BeMessage, RowDescriptor};
|
||||||
|
use rustls::crypto::aws_lc_rs;
|
||||||
use std::io::Cursor;
|
use std::io::Cursor;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use tokio::io::{AsyncRead, AsyncWrite};
|
use tokio::io::{AsyncRead, AsyncWrite};
|
||||||
@@ -92,10 +93,13 @@ static CERT: Lazy<rustls::pki_types::CertificateDer<'static>> = Lazy::new(|| {
|
|||||||
async fn simple_select_ssl() {
|
async fn simple_select_ssl() {
|
||||||
let (client_sock, server_sock) = make_tcp_pair().await;
|
let (client_sock, server_sock) = make_tcp_pair().await;
|
||||||
|
|
||||||
let server_cfg = rustls::ServerConfig::builder()
|
let server_cfg =
|
||||||
.with_no_client_auth()
|
rustls::ServerConfig::builder_with_provider(Arc::new(aws_lc_rs::default_provider()))
|
||||||
.with_single_cert(vec![CERT.clone()], KEY.clone_key())
|
.with_safe_default_protocol_versions()
|
||||||
.unwrap();
|
.expect("aws_lc_rs should support the default protocol versions")
|
||||||
|
.with_no_client_auth()
|
||||||
|
.with_single_cert(vec![CERT.clone()], KEY.clone_key())
|
||||||
|
.unwrap();
|
||||||
let tls_config = Some(Arc::new(server_cfg));
|
let tls_config = Some(Arc::new(server_cfg));
|
||||||
let pgbackend =
|
let pgbackend =
|
||||||
PostgresBackend::new(server_sock, AuthType::Trust, tls_config).expect("pgbackend creation");
|
PostgresBackend::new(server_sock, AuthType::Trust, tls_config).expect("pgbackend creation");
|
||||||
@@ -105,13 +109,16 @@ async fn simple_select_ssl() {
|
|||||||
pgbackend.run(&mut handler, &CancellationToken::new()).await
|
pgbackend.run(&mut handler, &CancellationToken::new()).await
|
||||||
});
|
});
|
||||||
|
|
||||||
let client_cfg = rustls::ClientConfig::builder()
|
let client_cfg =
|
||||||
.with_root_certificates({
|
rustls::ClientConfig::builder_with_provider(Arc::new(aws_lc_rs::default_provider()))
|
||||||
let mut store = rustls::RootCertStore::empty();
|
.with_safe_default_protocol_versions()
|
||||||
store.add(CERT.clone()).unwrap();
|
.expect("aws_lc_rs should support the default protocol versions")
|
||||||
store
|
.with_root_certificates({
|
||||||
})
|
let mut store = rustls::RootCertStore::empty();
|
||||||
.with_no_client_auth();
|
store.add(CERT.clone()).unwrap();
|
||||||
|
store
|
||||||
|
})
|
||||||
|
.with_no_client_auth();
|
||||||
let mut make_tls_connect = tokio_postgres_rustls::MakeRustlsConnect::new(client_cfg);
|
let mut make_tls_connect = tokio_postgres_rustls::MakeRustlsConnect::new(client_cfg);
|
||||||
let tls_connect = <MakeRustlsConnect as MakeTlsConnect<TcpStream>>::make_tls_connect(
|
let tls_connect = <MakeRustlsConnect as MakeTlsConnect<TcpStream>>::make_tls_connect(
|
||||||
&mut make_tls_connect,
|
&mut make_tls_connect,
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ use proxy::context::RequestMonitoring;
|
|||||||
use proxy::metrics::{Metrics, ThreadPoolMetrics};
|
use proxy::metrics::{Metrics, ThreadPoolMetrics};
|
||||||
use proxy::proxy::{copy_bidirectional_client_compute, run_until_cancelled, ErrorSource};
|
use proxy::proxy::{copy_bidirectional_client_compute, run_until_cancelled, ErrorSource};
|
||||||
use proxy::stream::{PqStream, Stream};
|
use proxy::stream::{PqStream, Stream};
|
||||||
|
use rustls::crypto::aws_lc_rs;
|
||||||
use rustls::pki_types::PrivateKeyDer;
|
use rustls::pki_types::PrivateKeyDer;
|
||||||
use tokio::io::{AsyncRead, AsyncWrite};
|
use tokio::io::{AsyncRead, AsyncWrite};
|
||||||
use tokio::net::TcpListener;
|
use tokio::net::TcpListener;
|
||||||
@@ -104,10 +105,11 @@ async fn main() -> anyhow::Result<()> {
|
|||||||
let first_cert = cert_chain.first().context("missing certificate")?;
|
let first_cert = cert_chain.first().context("missing certificate")?;
|
||||||
let tls_server_end_point = TlsServerEndPoint::new(first_cert)?;
|
let tls_server_end_point = TlsServerEndPoint::new(first_cert)?;
|
||||||
|
|
||||||
let tls_config = rustls::ServerConfig::builder_with_protocol_versions(&[
|
let tls_config = rustls::ServerConfig::builder_with_provider(Arc::new(
|
||||||
&rustls::version::TLS13,
|
aws_lc_rs::default_provider(),
|
||||||
&rustls::version::TLS12,
|
))
|
||||||
])
|
.with_protocol_versions(&[&rustls::version::TLS13, &rustls::version::TLS12])
|
||||||
|
.context("aws_lc_rs should support TLS1.2 and TLS1.3")?
|
||||||
.with_no_client_auth()
|
.with_no_client_auth()
|
||||||
.with_single_cert(cert_chain, key)?
|
.with_single_cert(cert_chain, key)?
|
||||||
.into();
|
.into();
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ use itertools::Itertools;
|
|||||||
use once_cell::sync::OnceCell;
|
use once_cell::sync::OnceCell;
|
||||||
use pq_proto::StartupMessageParams;
|
use pq_proto::StartupMessageParams;
|
||||||
use rustls::client::danger::ServerCertVerifier;
|
use rustls::client::danger::ServerCertVerifier;
|
||||||
|
use rustls::crypto::aws_lc_rs;
|
||||||
use rustls::pki_types::InvalidDnsNameError;
|
use rustls::pki_types::InvalidDnsNameError;
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
use tokio::net::TcpStream;
|
use tokio::net::TcpStream;
|
||||||
@@ -38,6 +39,9 @@ pub(crate) enum ConnectionError {
|
|||||||
#[error("{COULD_NOT_CONNECT}: {0}")]
|
#[error("{COULD_NOT_CONNECT}: {0}")]
|
||||||
CouldNotConnect(#[from] io::Error),
|
CouldNotConnect(#[from] io::Error),
|
||||||
|
|
||||||
|
#[error("Couldn't load native TLS certificates: {0:?}")]
|
||||||
|
TlsCertificateError(Vec<rustls_native_certs::Error>),
|
||||||
|
|
||||||
#[error("{COULD_NOT_CONNECT}: {0}")]
|
#[error("{COULD_NOT_CONNECT}: {0}")]
|
||||||
TlsError(#[from] InvalidDnsNameError),
|
TlsError(#[from] InvalidDnsNameError),
|
||||||
|
|
||||||
@@ -84,6 +88,7 @@ impl ReportableError for ConnectionError {
|
|||||||
}
|
}
|
||||||
ConnectionError::Postgres(_) => crate::error::ErrorKind::Compute,
|
ConnectionError::Postgres(_) => crate::error::ErrorKind::Compute,
|
||||||
ConnectionError::CouldNotConnect(_) => crate::error::ErrorKind::Compute,
|
ConnectionError::CouldNotConnect(_) => crate::error::ErrorKind::Compute,
|
||||||
|
ConnectionError::TlsCertificateError(_) => crate::error::ErrorKind::Service,
|
||||||
ConnectionError::TlsError(_) => crate::error::ErrorKind::Compute,
|
ConnectionError::TlsError(_) => crate::error::ErrorKind::Compute,
|
||||||
ConnectionError::WakeComputeError(e) => e.get_error_kind(),
|
ConnectionError::WakeComputeError(e) => e.get_error_kind(),
|
||||||
ConnectionError::TooManyConnectionAttempts(e) => e.get_error_kind(),
|
ConnectionError::TooManyConnectionAttempts(e) => e.get_error_kind(),
|
||||||
@@ -293,12 +298,20 @@ impl ConnCfg {
|
|||||||
let client_config = if allow_self_signed_compute {
|
let client_config = if allow_self_signed_compute {
|
||||||
// Allow all certificates for creating the connection
|
// Allow all certificates for creating the connection
|
||||||
let verifier = Arc::new(AcceptEverythingVerifier);
|
let verifier = Arc::new(AcceptEverythingVerifier);
|
||||||
rustls::ClientConfig::builder()
|
rustls::ClientConfig::builder_with_provider(Arc::new(aws_lc_rs::default_provider()))
|
||||||
|
.with_safe_default_protocol_versions()
|
||||||
|
.expect("aws_lc_rs should support the default protocol versions")
|
||||||
.dangerous()
|
.dangerous()
|
||||||
.with_custom_certificate_verifier(verifier)
|
.with_custom_certificate_verifier(verifier)
|
||||||
} else {
|
} else {
|
||||||
let root_store = TLS_ROOTS.get_or_try_init(load_certs)?.clone();
|
let root_store = TLS_ROOTS
|
||||||
rustls::ClientConfig::builder().with_root_certificates(root_store)
|
.get_or_try_init(load_certs)
|
||||||
|
.map_err(ConnectionError::TlsCertificateError)?
|
||||||
|
.clone();
|
||||||
|
rustls::ClientConfig::builder_with_provider(Arc::new(aws_lc_rs::default_provider()))
|
||||||
|
.with_safe_default_protocol_versions()
|
||||||
|
.expect("aws_lc_rs should support the default protocol versions")
|
||||||
|
.with_root_certificates(root_store)
|
||||||
};
|
};
|
||||||
let client_config = client_config.with_no_client_auth();
|
let client_config = client_config.with_no_client_auth();
|
||||||
|
|
||||||
@@ -359,10 +372,15 @@ fn filtered_options(params: &StartupMessageParams) -> Option<String> {
|
|||||||
Some(options)
|
Some(options)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn load_certs() -> Result<Arc<rustls::RootCertStore>, io::Error> {
|
fn load_certs() -> Result<Arc<rustls::RootCertStore>, Vec<rustls_native_certs::Error>> {
|
||||||
let der_certs = rustls_native_certs::load_native_certs()?;
|
let der_certs = rustls_native_certs::load_native_certs();
|
||||||
|
|
||||||
|
if !der_certs.errors.is_empty() {
|
||||||
|
return Err(der_certs.errors);
|
||||||
|
}
|
||||||
|
|
||||||
let mut store = rustls::RootCertStore::empty();
|
let mut store = rustls::RootCertStore::empty();
|
||||||
store.add_parsable_certificates(der_certs);
|
store.add_parsable_certificates(der_certs.certs);
|
||||||
Ok(Arc::new(store))
|
Ok(Arc::new(store))
|
||||||
}
|
}
|
||||||
static TLS_ROOTS: OnceCell<Arc<rustls::RootCertStore>> = OnceCell::new();
|
static TLS_ROOTS: OnceCell<Arc<rustls::RootCertStore>> = OnceCell::new();
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ use anyhow::{bail, ensure, Context, Ok};
|
|||||||
use clap::ValueEnum;
|
use clap::ValueEnum;
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use remote_storage::RemoteStorageConfig;
|
use remote_storage::RemoteStorageConfig;
|
||||||
use rustls::crypto::ring::sign;
|
use rustls::crypto::aws_lc_rs::{self, sign};
|
||||||
use rustls::pki_types::{CertificateDer, PrivateKeyDer};
|
use rustls::pki_types::{CertificateDer, PrivateKeyDer};
|
||||||
use sha2::{Digest, Sha256};
|
use sha2::{Digest, Sha256};
|
||||||
use tracing::{error, info};
|
use tracing::{error, info};
|
||||||
@@ -126,12 +126,12 @@ pub fn configure_tls(
|
|||||||
let cert_resolver = Arc::new(cert_resolver);
|
let cert_resolver = Arc::new(cert_resolver);
|
||||||
|
|
||||||
// allow TLS 1.2 to be compatible with older client libraries
|
// allow TLS 1.2 to be compatible with older client libraries
|
||||||
let mut config = rustls::ServerConfig::builder_with_protocol_versions(&[
|
let mut config =
|
||||||
&rustls::version::TLS13,
|
rustls::ServerConfig::builder_with_provider(Arc::new(aws_lc_rs::default_provider()))
|
||||||
&rustls::version::TLS12,
|
.with_protocol_versions(&[&rustls::version::TLS13, &rustls::version::TLS12])
|
||||||
])
|
.context("aws_lc_rs should support TLS1.2 and TLS1.3")?
|
||||||
.with_no_client_auth()
|
.with_no_client_auth()
|
||||||
.with_cert_resolver(cert_resolver.clone());
|
.with_cert_resolver(cert_resolver.clone());
|
||||||
|
|
||||||
config.alpn_protocols = vec![PG_ALPN_PROTOCOL.to_vec()];
|
config.alpn_protocols = vec![PG_ALPN_PROTOCOL.to_vec()];
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ use async_trait::async_trait;
|
|||||||
use http::StatusCode;
|
use http::StatusCode;
|
||||||
use retry::{retry_after, ShouldRetryWakeCompute};
|
use retry::{retry_after, ShouldRetryWakeCompute};
|
||||||
use rstest::rstest;
|
use rstest::rstest;
|
||||||
|
use rustls::crypto::aws_lc_rs;
|
||||||
use rustls::pki_types;
|
use rustls::pki_types;
|
||||||
use tokio_postgres::config::SslMode;
|
use tokio_postgres::config::SslMode;
|
||||||
use tokio_postgres::tls::{MakeTlsConnect, NoTls};
|
use tokio_postgres::tls::{MakeTlsConnect, NoTls};
|
||||||
@@ -38,25 +39,27 @@ fn generate_certs(
|
|||||||
pki_types::CertificateDer<'static>,
|
pki_types::CertificateDer<'static>,
|
||||||
pki_types::PrivateKeyDer<'static>,
|
pki_types::PrivateKeyDer<'static>,
|
||||||
)> {
|
)> {
|
||||||
let ca = rcgen::Certificate::from_params({
|
let ca_key = rcgen::KeyPair::generate()?;
|
||||||
|
let ca = {
|
||||||
let mut params = rcgen::CertificateParams::default();
|
let mut params = rcgen::CertificateParams::default();
|
||||||
params.is_ca = rcgen::IsCa::Ca(rcgen::BasicConstraints::Unconstrained);
|
params.is_ca = rcgen::IsCa::Ca(rcgen::BasicConstraints::Unconstrained);
|
||||||
params
|
params.self_signed(&ca_key)?
|
||||||
})?;
|
};
|
||||||
|
|
||||||
let cert = rcgen::Certificate::from_params({
|
let cert_key = rcgen::KeyPair::generate()?;
|
||||||
let mut params = rcgen::CertificateParams::new(vec![hostname.into()]);
|
let cert = {
|
||||||
|
let mut params = rcgen::CertificateParams::new(vec![hostname.into()])?;
|
||||||
params.distinguished_name = rcgen::DistinguishedName::new();
|
params.distinguished_name = rcgen::DistinguishedName::new();
|
||||||
params
|
params
|
||||||
.distinguished_name
|
.distinguished_name
|
||||||
.push(rcgen::DnType::CommonName, common_name);
|
.push(rcgen::DnType::CommonName, common_name);
|
||||||
params
|
params.signed_by(&cert_key, &ca, &ca_key)?
|
||||||
})?;
|
};
|
||||||
|
|
||||||
Ok((
|
Ok((
|
||||||
pki_types::CertificateDer::from(ca.serialize_der()?),
|
ca.der().clone(),
|
||||||
pki_types::CertificateDer::from(cert.serialize_der_with_signer(&ca)?),
|
cert.der().clone(),
|
||||||
pki_types::PrivateKeyDer::Pkcs8(cert.serialize_private_key_der().into()),
|
pki_types::PrivateKeyDer::Pkcs8(cert_key.serialize_der().into()),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,10 +93,13 @@ fn generate_tls_config<'a>(
|
|||||||
let (ca, cert, key) = generate_certs(hostname, common_name)?;
|
let (ca, cert, key) = generate_certs(hostname, common_name)?;
|
||||||
|
|
||||||
let tls_config = {
|
let tls_config = {
|
||||||
let config = rustls::ServerConfig::builder()
|
let config =
|
||||||
.with_no_client_auth()
|
rustls::ServerConfig::builder_with_provider(Arc::new(aws_lc_rs::default_provider()))
|
||||||
.with_single_cert(vec![cert.clone()], key.clone_key())?
|
.with_safe_default_protocol_versions()
|
||||||
.into();
|
.context("aws_lc_rs should support the default protocol versions")?
|
||||||
|
.with_no_client_auth()
|
||||||
|
.with_single_cert(vec![cert.clone()], key.clone_key())?
|
||||||
|
.into();
|
||||||
|
|
||||||
let mut cert_resolver = CertResolver::new();
|
let mut cert_resolver = CertResolver::new();
|
||||||
cert_resolver.add_cert(key, vec![cert], true)?;
|
cert_resolver.add_cert(key, vec![cert], true)?;
|
||||||
@@ -108,13 +114,16 @@ fn generate_tls_config<'a>(
|
|||||||
};
|
};
|
||||||
|
|
||||||
let client_config = {
|
let client_config = {
|
||||||
let config = rustls::ClientConfig::builder()
|
let config =
|
||||||
.with_root_certificates({
|
rustls::ClientConfig::builder_with_provider(Arc::new(aws_lc_rs::default_provider()))
|
||||||
let mut store = rustls::RootCertStore::empty();
|
.with_safe_default_protocol_versions()
|
||||||
store.add(ca)?;
|
.context("aws_lc_rs should support the default protocol versions")?
|
||||||
store
|
.with_root_certificates({
|
||||||
})
|
let mut store = rustls::RootCertStore::empty();
|
||||||
.with_no_client_auth();
|
store.add(ca)?;
|
||||||
|
store
|
||||||
|
})
|
||||||
|
.with_no_client_auth();
|
||||||
|
|
||||||
ClientConfig { config, hostname }
|
ClientConfig { config, hostname }
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
use std::{collections::HashSet, str::FromStr, sync::Arc};
|
use std::{collections::HashSet, str::FromStr, sync::Arc};
|
||||||
|
|
||||||
|
use anyhow::{bail, Context};
|
||||||
use futures::stream::{StreamExt, TryStreamExt};
|
use futures::stream::{StreamExt, TryStreamExt};
|
||||||
use once_cell::sync::OnceCell;
|
use once_cell::sync::OnceCell;
|
||||||
use pageserver_api::shard::TenantShardId;
|
use pageserver_api::shard::TenantShardId;
|
||||||
use postgres_ffi::{XLogFileName, PG_TLI};
|
use postgres_ffi::{XLogFileName, PG_TLI};
|
||||||
use remote_storage::GenericRemoteStorage;
|
use remote_storage::GenericRemoteStorage;
|
||||||
|
use rustls::crypto::aws_lc_rs;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use tokio_postgres::types::PgLsn;
|
use tokio_postgres::types::PgLsn;
|
||||||
use tracing::{debug, error, info};
|
use tracing::{debug, error, info};
|
||||||
@@ -231,10 +233,15 @@ async fn check_timeline(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn load_certs() -> Result<Arc<rustls::RootCertStore>, std::io::Error> {
|
fn load_certs() -> anyhow::Result<Arc<rustls::RootCertStore>> {
|
||||||
let der_certs = rustls_native_certs::load_native_certs()?;
|
let der_certs = rustls_native_certs::load_native_certs();
|
||||||
|
|
||||||
|
if !der_certs.errors.is_empty() {
|
||||||
|
bail!("could not load native tls certs: {:?}", der_certs.errors);
|
||||||
|
}
|
||||||
|
|
||||||
let mut store = rustls::RootCertStore::empty();
|
let mut store = rustls::RootCertStore::empty();
|
||||||
store.add_parsable_certificates(der_certs);
|
store.add_parsable_certificates(der_certs.certs);
|
||||||
Ok(Arc::new(store))
|
Ok(Arc::new(store))
|
||||||
}
|
}
|
||||||
static TLS_ROOTS: OnceCell<Arc<rustls::RootCertStore>> = OnceCell::new();
|
static TLS_ROOTS: OnceCell<Arc<rustls::RootCertStore>> = OnceCell::new();
|
||||||
@@ -248,9 +255,12 @@ async fn load_timelines_from_db(
|
|||||||
|
|
||||||
// Use rustls (Neon requires TLS)
|
// Use rustls (Neon requires TLS)
|
||||||
let root_store = TLS_ROOTS.get_or_try_init(load_certs)?.clone();
|
let root_store = TLS_ROOTS.get_or_try_init(load_certs)?.clone();
|
||||||
let client_config = rustls::ClientConfig::builder()
|
let client_config =
|
||||||
.with_root_certificates(root_store)
|
rustls::ClientConfig::builder_with_provider(Arc::new(aws_lc_rs::default_provider()))
|
||||||
.with_no_client_auth();
|
.with_safe_default_protocol_versions()
|
||||||
|
.context("aws_lc_rs should support the default protocol versions")?
|
||||||
|
.with_root_certificates(root_store)
|
||||||
|
.with_no_client_auth();
|
||||||
let tls_connector = tokio_postgres_rustls::MakeRustlsConnect::new(client_config);
|
let tls_connector = tokio_postgres_rustls::MakeRustlsConnect::new(client_config);
|
||||||
let (client, connection) = tokio_postgres::connect(&dump_db_connstr, tls_connector).await?;
|
let (client, connection) = tokio_postgres::connect(&dump_db_connstr, tls_connector).await?;
|
||||||
// The connection object performs the actual communication with the database,
|
// The connection object performs the actual communication with the database,
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ deranged = { version = "0.3", default-features = false, features = ["powerfmt",
|
|||||||
digest = { version = "0.10", features = ["mac", "oid", "std"] }
|
digest = { version = "0.10", features = ["mac", "oid", "std"] }
|
||||||
either = { version = "1" }
|
either = { version = "1" }
|
||||||
fail = { version = "0.5", default-features = false, features = ["failpoints"] }
|
fail = { version = "0.5", default-features = false, features = ["failpoints"] }
|
||||||
futures = { version = "0.3" }
|
|
||||||
futures-channel = { version = "0.3", features = ["sink"] }
|
futures-channel = { version = "0.3", features = ["sink"] }
|
||||||
futures-executor = { version = "0.3" }
|
futures-executor = { version = "0.3" }
|
||||||
futures-io = { version = "0.3" }
|
futures-io = { version = "0.3" }
|
||||||
@@ -48,7 +47,7 @@ hyper-dff4ba8e3ae991db = { package = "hyper", version = "1", features = ["full"]
|
|||||||
hyper-util = { version = "0.1", features = ["client-legacy", "server-auto", "service"] }
|
hyper-util = { version = "0.1", features = ["client-legacy", "server-auto", "service"] }
|
||||||
indexmap-dff4ba8e3ae991db = { package = "indexmap", version = "1", default-features = false, features = ["std"] }
|
indexmap-dff4ba8e3ae991db = { package = "indexmap", version = "1", default-features = false, features = ["std"] }
|
||||||
indexmap-f595c2ba2a3f28df = { package = "indexmap", version = "2", features = ["serde"] }
|
indexmap-f595c2ba2a3f28df = { package = "indexmap", version = "2", features = ["serde"] }
|
||||||
itertools = { version = "0.12" }
|
itertools = { version = "0.10" }
|
||||||
lazy_static = { version = "1", default-features = false, features = ["spin_no_std"] }
|
lazy_static = { version = "1", default-features = false, features = ["spin_no_std"] }
|
||||||
libc = { version = "0.2", features = ["extra_traits", "use_std"] }
|
libc = { version = "0.2", features = ["extra_traits", "use_std"] }
|
||||||
log = { version = "0.4", default-features = false, features = ["std"] }
|
log = { version = "0.4", default-features = false, features = ["std"] }
|
||||||
@@ -66,6 +65,8 @@ regex = { version = "1" }
|
|||||||
regex-automata = { version = "0.4", default-features = false, features = ["dfa-onepass", "hybrid", "meta", "nfa-backtrack", "perf-inline", "perf-literal", "unicode"] }
|
regex-automata = { version = "0.4", default-features = false, features = ["dfa-onepass", "hybrid", "meta", "nfa-backtrack", "perf-inline", "perf-literal", "unicode"] }
|
||||||
regex-syntax = { version = "0.8" }
|
regex-syntax = { version = "0.8" }
|
||||||
reqwest = { version = "0.12", default-features = false, features = ["blocking", "json", "rustls-tls", "stream"] }
|
reqwest = { version = "0.12", default-features = false, features = ["blocking", "json", "rustls-tls", "stream"] }
|
||||||
|
rustls = { version = "0.23", features = ["ring"] }
|
||||||
|
rustls-webpki = { version = "0.102", default-features = false, features = ["aws_lc_rs", "ring", "std"] }
|
||||||
scopeguard = { version = "1" }
|
scopeguard = { version = "1" }
|
||||||
serde = { version = "1", features = ["alloc", "derive"] }
|
serde = { version = "1", features = ["alloc", "derive"] }
|
||||||
serde_json = { version = "1", features = ["alloc", "raw_value"] }
|
serde_json = { version = "1", features = ["alloc", "raw_value"] }
|
||||||
@@ -79,6 +80,7 @@ tikv-jemalloc-sys = { version = "0.5" }
|
|||||||
time = { version = "0.3", features = ["macros", "serde-well-known"] }
|
time = { version = "0.3", features = ["macros", "serde-well-known"] }
|
||||||
tokio = { version = "1", features = ["fs", "io-std", "io-util", "macros", "net", "process", "rt-multi-thread", "signal", "test-util"] }
|
tokio = { version = "1", features = ["fs", "io-std", "io-util", "macros", "net", "process", "rt-multi-thread", "signal", "test-util"] }
|
||||||
tokio-postgres = { git = "https://github.com/neondatabase/rust-postgres.git", rev = "20031d7a9ee1addeae6e0968e3899ae6bf01cee2", features = ["with-serde_json-1"] }
|
tokio-postgres = { git = "https://github.com/neondatabase/rust-postgres.git", rev = "20031d7a9ee1addeae6e0968e3899ae6bf01cee2", features = ["with-serde_json-1"] }
|
||||||
|
tokio-rustls = { version = "0.26", features = ["ring"] }
|
||||||
tokio-stream = { version = "0.1", features = ["net"] }
|
tokio-stream = { version = "0.1", features = ["net"] }
|
||||||
tokio-util = { version = "0.7", features = ["codec", "compat", "io", "rt"] }
|
tokio-util = { version = "0.7", features = ["codec", "compat", "io", "rt"] }
|
||||||
toml_edit = { version = "0.22", features = ["serde"] }
|
toml_edit = { version = "0.22", features = ["serde"] }
|
||||||
@@ -104,7 +106,7 @@ half = { version = "2", default-features = false, features = ["num-traits"] }
|
|||||||
hashbrown = { version = "0.14", features = ["raw"] }
|
hashbrown = { version = "0.14", features = ["raw"] }
|
||||||
indexmap-dff4ba8e3ae991db = { package = "indexmap", version = "1", default-features = false, features = ["std"] }
|
indexmap-dff4ba8e3ae991db = { package = "indexmap", version = "1", default-features = false, features = ["std"] }
|
||||||
indexmap-f595c2ba2a3f28df = { package = "indexmap", version = "2", features = ["serde"] }
|
indexmap-f595c2ba2a3f28df = { package = "indexmap", version = "2", features = ["serde"] }
|
||||||
itertools = { version = "0.12" }
|
itertools = { version = "0.10" }
|
||||||
libc = { version = "0.2", features = ["extra_traits", "use_std"] }
|
libc = { version = "0.2", features = ["extra_traits", "use_std"] }
|
||||||
log = { version = "0.4", default-features = false, features = ["std"] }
|
log = { version = "0.4", default-features = false, features = ["std"] }
|
||||||
memchr = { version = "2" }
|
memchr = { version = "2" }
|
||||||
@@ -122,8 +124,7 @@ regex = { version = "1" }
|
|||||||
regex-automata = { version = "0.4", default-features = false, features = ["dfa-onepass", "hybrid", "meta", "nfa-backtrack", "perf-inline", "perf-literal", "unicode"] }
|
regex-automata = { version = "0.4", default-features = false, features = ["dfa-onepass", "hybrid", "meta", "nfa-backtrack", "perf-inline", "perf-literal", "unicode"] }
|
||||||
regex-syntax = { version = "0.8" }
|
regex-syntax = { version = "0.8" }
|
||||||
serde = { version = "1", features = ["alloc", "derive"] }
|
serde = { version = "1", features = ["alloc", "derive"] }
|
||||||
syn-dff4ba8e3ae991db = { package = "syn", version = "1", features = ["extra-traits", "full", "visit"] }
|
syn = { version = "2", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] }
|
||||||
syn-f595c2ba2a3f28df = { package = "syn", version = "2", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] }
|
|
||||||
time-macros = { version = "0.2", default-features = false, features = ["formatting", "parsing", "serde"] }
|
time-macros = { version = "0.2", default-features = false, features = ["formatting", "parsing", "serde"] }
|
||||||
toml_edit = { version = "0.22", features = ["serde"] }
|
toml_edit = { version = "0.22", features = ["serde"] }
|
||||||
zstd = { version = "0.13" }
|
zstd = { version = "0.13" }
|
||||||
|
|||||||
Reference in New Issue
Block a user