The Echo Server
async fn run_echo_server(config: EchoServerConfig) -> anyhow::Result<()> {
let server_cfg = tls::server_config(
&[&config.server_cert_pem, &config.intermediate_cert_pem],
&config.server_key_pem,
true,
Some(&config.ca_pem),
)?;
let acceptor = TlsAcceptor::from(Arc::new(server_cfg));
let listener = TcpListener::bind(&config.addr).await?;
println!("mTLS echo server on {}", config.addr);
loop {
let (stream, peer) = listener.accept().await?;
let acceptor = acceptor.clone();
tokio::spawn(async move {
if let Err(e) = handle_connection(stream, acceptor, peer).await {
eprintln!("Connection error: {e}");
}
});
}
}