diff --git a/src/server.rs b/src/server.rs index 1c1438d..191f6b7 100644 --- a/src/server.rs +++ b/src/server.rs @@ -5,7 +5,7 @@ use crate::rusttls::stream::Stream; use futures_core::ready; use futures_io::{AsyncRead, AsyncWrite}; -use rustls::ServerSession; +use rustls::{Certificate, ServerSession}; use std::future::Future; use std::pin::Pin; use std::task::{Context, Poll}; @@ -22,6 +22,16 @@ pub struct TlsStream { pub(crate) state: TlsState, } +impl TlsStream { + /// Retrieves the certificate chain used by the client, + /// if client authentication was completed. + /// + /// The return value is None until this value is available. + pub fn client_certificates(&self) -> Option> { + self.session.get_peer_certificates() + } +} + pub(crate) enum MidHandshake { Handshaking(TlsStream), End,