免责声明:JS / TS即将推出,而Rust则已经花了几个月的时间了。
我正在为一个非常简单的后端制作原型,并且我将actix-web
用于服务器端TLS,在这里我通过ServerConfig
中的rustls
使用'server.pem'和'server_key.pem' 1}}。我认为一切正常。问题是,我需要从服务向使用相同证书设置的另一个服务执行HTTPS请求。我已经研究了一些SSL / TLS方法和一些HTTP库,但是没有找到我可以使用的任何东西。
尝试使用reqwest
,看起来像这样:
注意以下是证书类型:
root_file
:Result<Vec<u8>, AppError>
client_file
:Result<String, AppError>
client_key_file
:Result<String, AppError>
let CertificateContents {
root_file,
client_file,
client_key_file,
..
} = get_cert_contents(None);
let root_cert =
Certificate::from_pem(&root_file?).map_err(|e| AppError::FileRead(e.to_string()))?;
// Identity represents the client cert and client key
let client_file = client_file?;
let client_key_file = client_key_file?;
let combined = format!("{}{}", client_key_file, client_file);
let identity = Identity::from_pem(combined.as_bytes()).unwrap();
// https://docs.rs/reqwest/0.10.6/reqwest/struct.ClientBuilder.html
let client = reqwest::Client::builder()
.add_root_certificate(root_cert)
.identity(identity) // client + client key
.default_headers(headers)
.build()
.unwrap();
let http_res = client
.get(&uri)
.send()
.await
.map_err(|e| AppError::Internal(format!("Request error: {}", e.to_string())))?;
此请求未通过,导致403禁止访问。我怀疑Identity
部分是超错误的,因为我在阅读reqwest
文档时有点将它砍在一起。
虽然我将使用类似Node.js的方法:
注意:root
,client
和clientKey
的类型为(node.js)Buffer
。
const { root, client, clientKey } = getCertificates();
const res = await requestPromise.get(uri, {
ca: [root],
cert: client,
key: clientKey,
agentOptions: {
secureOptions: getConfig().ssl,
},
});
是否有一个现有的板条箱可以帮助我实现{。{1}}版本的node.js?
任何指导表示赞赏!