在 Rust 中编译一个包含网络请求(特别是 HTTPS)的项目时,例如使用 **reqwest** 库。**reqwest** 库使用`native-tls`作为默认的 TLS 后端,`native-tls`是一个适配器,它会链接到操作系统原生的 TLS 库,在 Linux 上通常是 **OpenSSL**。 ## 解决方案 ### 方案一:使用`rustls` `rustls`是一个纯 Rust 实现的现在 TLS 库,它的最大优点是**没有任何 C 代码依赖**。 **修改依赖:** 修改`Cargo.toml`文件中`reqwest`的特性,禁用默认特性,并且启用`rustls-tls`特性。 ```toml [dependencies] # --snip-- reqwest = { version = "0.12", default-features = false, features = ["rustls-tls"] } ``` ### 方案二:编译 OpenSSL 通过`openssl-sys`的`vendored`特性来实现。这个特性会让`openssl-sys`在编译时自动下载OpenSSL的源码并且静态编译它。 ```toml [dependencies] # --snip-- reqwest = { version = "0.12" } openssl = {version = "0.10", features = ["vendored"]} ``` Loading... 在 Rust 中编译一个包含网络请求(特别是 HTTPS)的项目时,例如使用 **reqwest** 库。**reqwest** 库使用`native-tls`作为默认的 TLS 后端,`native-tls`是一个适配器,它会链接到操作系统原生的 TLS 库,在 Linux 上通常是 **OpenSSL**。 ## 解决方案 ### 方案一:使用`rustls` `rustls`是一个纯 Rust 实现的现在 TLS 库,它的最大优点是**没有任何 C 代码依赖**。 **修改依赖:** 修改`Cargo.toml`文件中`reqwest`的特性,禁用默认特性,并且启用`rustls-tls`特性。 ```toml [dependencies] # --snip-- reqwest = { version = "0.12", default-features = false, features = ["rustls-tls"] } ``` ### 方案二:编译 OpenSSL 通过`openssl-sys`的`vendored`特性来实现。这个特性会让`openssl-sys`在编译时自动下载OpenSSL的源码并且静态编译它。 ```toml [dependencies] # --snip-- reqwest = { version = "0.12" } openssl = {version = "0.10", features = ["vendored"]} ``` 最后修改:2025 年 12 月 12 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 1 如果觉得我的文章对你有用,请随意赞赏