快速提问,reqwest 是否允许自签名证书?我创建了一个启用 tls 的 rust-warp 网络服务器。我创建了一个 reqwest 客户端来向该服务器发出请求以进行测试。添加到 add_root_certificate 的证书与服务器正在使用的证书相同。这很奇怪,因为当我使用其他客户端(例如 Python 或 CURL)时,发出请求没有问题,并且我的服务器上没有收到 TLS 错误。
这是我的示例 Rust 代码:
let mut buf = Vec::new();
File::open("my_cert.pem")?
.read_to_end(&mut buf)?;
let cert = reqwest::Certificate::from_pem(&buf)?;
let client = reqwest::Client::builder()
.add_root_certificate(cert)
.build()?;
let mut map = HashMap::new();
map.insert("name", "John");
let res = client.post("https://IP:PORT/endpoint).json(&map).send().await?;
这是我的示例 Python 代码:
`
path_to_cert = "path/to/cert/my_cert.pem"
route = "https://IP:PORT/endpoint"
payload = {
"name": "John",
}
res = requests.post(url, data = json.dumps(payload), verify=path_to_cert)
不确定是什么原因导致此问题?任何帮助将不胜感激,谢谢!
我已经构建了一个 rust-warp 服务器,并将数据发布到它进行测试。我希望我的 rust 请求能够成功地将数据发布到我的服务器,但我的服务器日志:
收到 TLS 警报 AlertMessagePayload { 等级:致命, 描述:证书未知, }
这是一个错误:https://github.com/seanmonstar/reqwest/issues/1260
您现在需要使用
rustls-tls
作为您的 tls 后端。
cargo.toml
[dependencies]
reqwest = { version = "0.11.24", features = ["blocking", "rustls-tls"] }
main.rs
let client = reqwest::blocking::ClientBuilder::new().add_root_certificate(ca_cert)
.use_rustls_tls()
.build()?;