Fix rustls CryptoProvider panic by explicitly selecting ring
Both ring and aws-lc-rs were enabled transitively (webpki-roots enables rustls default features), causing rustls to panic at runtime because it couldn't auto-detect which crypto provider to use. - Add rustls as direct dep with ring only, disable default features - Switch russh from aws-lc-rs (default) to ring crypto backend - Call ring::default_provider().install_default() at startup - Add macOS build fix: detect Homebrew OpenSSL path for netsnmp's libcrypto
This commit is contained in:
parent
28571b0243
commit
32a60beadb
4 changed files with 29 additions and 11 deletions
14
Cargo.lock
generated
14
Cargo.lock
generated
|
|
@ -159,7 +159,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7b7b6141e96a8c160799cc2d5adecd5cbbe5054cb8c7c4af53da0f83bb7ad256"
|
checksum = "7b7b6141e96a8c160799cc2d5adecd5cbbe5054cb8c7c4af53da0f83bb7ad256"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aws-lc-sys",
|
"aws-lc-sys",
|
||||||
"untrusted 0.7.1",
|
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
@ -2224,7 +2223,7 @@ dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"getrandom 0.2.17",
|
"getrandom 0.2.17",
|
||||||
"libc",
|
"libc",
|
||||||
"untrusted 0.9.0",
|
"untrusted",
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
@ -2254,7 +2253,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "01fe22d10a0e39c1134a971d5b8db8a40357b48ef22d81fa8d6eac22202dd782"
|
checksum = "01fe22d10a0e39c1134a971d5b8db8a40357b48ef22d81fa8d6eac22202dd782"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aes",
|
"aes",
|
||||||
"aws-lc-rs",
|
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"block-padding",
|
"block-padding",
|
||||||
"byteorder",
|
"byteorder",
|
||||||
|
|
@ -2293,6 +2291,7 @@ dependencies = [
|
||||||
"pkcs8 0.10.2",
|
"pkcs8 0.10.2",
|
||||||
"rand 0.9.2",
|
"rand 0.9.2",
|
||||||
"rand_core 0.10.0-rc-3",
|
"rand_core 0.10.0-rc-3",
|
||||||
|
"ring",
|
||||||
"rsa",
|
"rsa",
|
||||||
"russh-cryptovec",
|
"russh-cryptovec",
|
||||||
"russh-util",
|
"russh-util",
|
||||||
|
|
@ -2397,7 +2396,7 @@ dependencies = [
|
||||||
"aws-lc-rs",
|
"aws-lc-rs",
|
||||||
"ring",
|
"ring",
|
||||||
"rustls-pki-types",
|
"rustls-pki-types",
|
||||||
"untrusted 0.9.0",
|
"untrusted",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -2963,6 +2962,7 @@ dependencies = [
|
||||||
"regex",
|
"regex",
|
||||||
"reqwest",
|
"reqwest",
|
||||||
"russh",
|
"russh",
|
||||||
|
"rustls",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"sha2 0.10.9",
|
"sha2 0.10.9",
|
||||||
|
|
@ -3089,12 +3089,6 @@ dependencies = [
|
||||||
"subtle",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "untrusted"
|
|
||||||
version = "0.7.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "untrusted"
|
name = "untrusted"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "time"
|
||||||
thiserror = "2"
|
thiserror = "2"
|
||||||
tokio-tungstenite = { version = "0.28", features = ["rustls-tls-webpki-roots"] }
|
tokio-tungstenite = { version = "0.28", features = ["rustls-tls-webpki-roots"] }
|
||||||
tokio-rustls = "0.26"
|
tokio-rustls = "0.26"
|
||||||
|
rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12"] }
|
||||||
futures = "0.3"
|
futures = "0.3"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
|
|
@ -18,7 +19,7 @@ prost = "0.14"
|
||||||
prost-types = "0.14"
|
prost-types = "0.14"
|
||||||
tracing = "0.1"
|
tracing = "0.1"
|
||||||
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
||||||
russh = "0.57"
|
russh = { version = "0.57", default-features = false, features = ["ring", "flate2", "rsa"] }
|
||||||
async-trait = "0.1"
|
async-trait = "0.1"
|
||||||
home = "=0.5.12"
|
home = "=0.5.12"
|
||||||
zeroize = { version = "1", features = ["derive"] }
|
zeroize = { version = "1", features = ["derive"] }
|
||||||
|
|
|
||||||
16
build.rs
16
build.rs
|
|
@ -11,6 +11,22 @@ fn main() {
|
||||||
// Link against netsnmp library
|
// Link against netsnmp library
|
||||||
println!("cargo:rustc-link-lib=netsnmp");
|
println!("cargo:rustc-link-lib=netsnmp");
|
||||||
|
|
||||||
|
// On macOS with Homebrew, net-snmp depends on OpenSSL which is keg-only
|
||||||
|
// (not linked into /usr/local/lib). Add the OpenSSL library path so the
|
||||||
|
// linker can find libcrypto.
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
{
|
||||||
|
if let Ok(output) = std::process::Command::new("brew")
|
||||||
|
.args(["--prefix", "openssl@3"])
|
||||||
|
.output()
|
||||||
|
{
|
||||||
|
if output.status.success() {
|
||||||
|
let prefix = String::from_utf8_lossy(&output.stdout).trim().to_string();
|
||||||
|
println!("cargo:rustc-link-search={}/lib", prefix);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Inject compile timestamp as version
|
// Inject compile timestamp as version
|
||||||
// This allows tracking when a specific agent binary was built
|
// This allows tracking when a specific agent binary was built
|
||||||
let version = get_version();
|
let version = get_version();
|
||||||
|
|
|
||||||
|
|
@ -117,6 +117,13 @@ struct Args {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
// Install ring as the default TLS crypto provider. Required because both
|
||||||
|
// ring and aws-lc-rs features are enabled transitively, so rustls can't
|
||||||
|
// auto-detect which one to use.
|
||||||
|
rustls::crypto::ring::default_provider()
|
||||||
|
.install_default()
|
||||||
|
.expect("Failed to install rustls CryptoProvider");
|
||||||
|
|
||||||
// Build Tokio runtime with larger stack size for SNMPv3 crypto operations
|
// Build Tokio runtime with larger stack size for SNMPv3 crypto operations
|
||||||
let runtime = tokio::runtime::Builder::new_multi_thread()
|
let runtime = tokio::runtime::Builder::new_multi_thread()
|
||||||
.enable_all()
|
.enable_all()
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue