在 Rust 中编译一个包含网络请求(特别是 HTTPS)的项目时,例如使用 reqwest 库。reqwest 库使用native-tls作为默认的 TLS 后端,native-tls是一个适配器,它会链接到操作系统原生的 TLS 库,在 Linux 上通常是 OpenSSL。
解决方案
方案一:使用rustls
rustls是一个纯 Rust 实现的现在 TLS 库,它的最大优点是没有任何 C 代码依赖。
修改依赖:
修改Cargo.toml文件中reqwest的特性,禁用默认特性,并且启用rustls-tls特性。
[dependencies]
# --snip--
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls"] }方案二:编译 OpenSSL
通过openssl-sys的vendored特性来实现。这个特性会让openssl-sys在编译时自动下载OpenSSL的源码并且静态编译它。
[dependencies]
# --snip--
reqwest = { version = "0.12" }
openssl = {version = "0.10", features = ["vendored"]}