如何获取用于在我的 Rust Tonic 服务中进行身份验证的客户端证书?

问题描述

在我的 Rust Tonic 设置中,我在客户端和服务器之间配置了 mTLS(双向 TLS)身份验证。

现在,我想使用客户端证书中存储的数据 a) 用于授权访问(拦截器) b) 用于提供服务(即,如果 Petr 正在连接,我想看到 Hello Petr

我找不到任何关于此的示例,遍历 Tonic 源代码也无济于事。

解决方法

在 Discord 频道 tokio/tonic 上询问后,我得到了解决方案(感谢 Lucio Franco!)并且还发现实际上一个补品的例子(是的,我的研究不够好).

对于任何感兴趣的人,这是示例代码: https://github.com/hyperium/tonic/blob/master/examples/src/tls_client_auth/server.rs

简要总结:

在为服务生成的每个方法中提供的 request 参数包含返回所有用户证书的参数 peer_certs()

然后可以迭代这些,并解析它们的字节。我使用了 crate x509-parser,这对我很有用,但其他人可能也可以使用。