我正在查看this示例,我试图了解如何读取客户端证书以从中提取
subject
。
有一个处理请求的
make_service_fn
函数,先被调用。从技术上讲,提取流及其数据是可能的:
let make_svc = make_service_fn(move |stream: &TlsStream| {
let custom_field = stream.custom_field;
async move { Ok::<_, Infallible>(service_fn(move |req| req_handler(req, api_key))) }
});
但问题是
poll_read
在make_service_fn
的主体之后调用,为时已晚。这能够提取客户端证书及其数据,但由于它被称为第二个,因此会导致未初始化的字段。
State::Streaming(ref mut stream) => {
let client_certificates = stream.get_ref().1.peer_certificates();
// extract data from the certificate and initialize custom_field
}
我认为在
req_handler
中提取它是不可能的,这就是我尝试这种方式的原因。