How to choose server certificate dynamically and in `aync` manner based on hostname in ClientHello?

Hello Rust Community!

I am new to async Rust and have moderate experience of writing sync code in Rust. I am writing a TCP server with TLS support for learning purpose. I want to choose certificates based on the hostname specified in ClientHello. Certificates will be fetched from other key store making it perfect usecase for async. I have read several options, but none provides a concrete example on how to do it.

  1. I came to know about cert_resolver in rustls::server::ServerConfig. But from my understanding it is not async, and as mentioned in rustls documentation:

For applications that use async I/O and need to do I/O to choose a certificate (for instance, fetching a certificate from a data store), the Acceptor interface is more suitable.

Ok, good.But if I go to Acceptor documentaion, I go blank on how to use it with async runtime like tokio? I could not get clear idea of how to use this struct when working with tokio as tokio_rustls::TlsAcceptor does not have similar methods like read_tls in rustls.

  1. I also referred to alternatives like tokio_native_tls. But again same issue, not a single example available or I could not find it.

What is recommended way of achieving this functionality when using tokio? An minimal example is very much appreciated.

Thank you!

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.