feat(server): log negotiated cipher suite after handshake

This commit is contained in:
2026-02-05 13:09:56 +02:00
parent 46bc7960c1
commit d235a5d2c7
3 changed files with 18 additions and 15 deletions

View File

@@ -52,12 +52,7 @@ pub async fn write_request<W: AsyncWriteExt + Unpin>(writer: &mut W, size: u64)
/// The pattern is a repeating sequence: 0x00, 0x01, ..., 0xFF, 0x00, ... /// The pattern is a repeating sequence: 0x00, 0x01, ..., 0xFF, 0x00, ...
#[must_use] #[must_use]
pub fn generate_payload(size: u64) -> Vec<u8> { pub fn generate_payload(size: u64) -> Vec<u8> {
let size = size as usize; (0..size).map(|i| (i & 0xFF) as u8).collect()
let mut payload = Vec::with_capacity(size);
for i in 0..size {
payload.push((i & 0xFF) as u8);
}
payload
} }
/// Write deterministic payload to a stream. /// Write deterministic payload to a stream.
@@ -69,13 +64,13 @@ pub fn generate_payload(size: u64) -> Vec<u8> {
pub async fn write_payload<W: AsyncWriteExt + Unpin>(writer: &mut W, size: u64) -> io::Result<()> { pub async fn write_payload<W: AsyncWriteExt + Unpin>(writer: &mut W, size: u64) -> io::Result<()> {
const CHUNK_SIZE: usize = 64 * 1024; const CHUNK_SIZE: usize = 64 * 1024;
let mut remaining = size as usize; let mut remaining = size as usize;
let mut offset = 0usize; let mut offset = 0;
while remaining > 0 { while remaining > 0 {
let chunk_len = remaining.min(CHUNK_SIZE); let chunk_len = remaining.min(CHUNK_SIZE);
let chunk: Vec<u8> = (0..chunk_len) let chunk = (0..chunk_len)
.map(|i| ((offset + i) & 0xFF) as u8) .map(|i| ((offset + i) & 0xFF) as u8)
.collect(); .collect::<Vec<_>>();
writer.write_all(&chunk).await?; writer.write_all(&chunk).await?;
remaining -= chunk_len; remaining -= chunk_len;
offset += chunk_len; offset += chunk_len;
@@ -93,8 +88,8 @@ pub async fn read_payload<R: AsyncReadExt + Unpin>(
expected_size: u64, expected_size: u64,
) -> io::Result<u64> { ) -> io::Result<u64> {
const CHUNK_SIZE: usize = 64 * 1024; const CHUNK_SIZE: usize = 64 * 1024;
let mut buf = vec![0u8; CHUNK_SIZE]; let mut buf = vec![0; CHUNK_SIZE];
let mut total_read = 0u64; let mut total_read = 0;
while total_read < expected_size { while total_read < expected_size {
let to_read = ((expected_size - total_read) as usize).min(CHUNK_SIZE); let to_read = ((expected_size - total_read) as usize).min(CHUNK_SIZE);

View File

@@ -165,6 +165,9 @@ async fn run_iteration(
.await .await
.map_err(|e| miette!("TLS handshake failed: {e}"))?; .map_err(|e| miette!("TLS handshake failed: {e}"))?;
let (_, conn) = tls_stream.get_ref();
info!(cipher = ?conn.negotiated_cipher_suite(), "connection established");
let handshake_ns = start.elapsed().as_nanos() as u64; let handshake_ns = start.elapsed().as_nanos() as u64;
write_request(&mut tls_stream, u64::from(payload_bytes)) write_request(&mut tls_stream, u64::from(payload_bytes))

View File

@@ -78,19 +78,24 @@ async fn handle_connection(stream: TcpStream, peer: SocketAddr, tls_config: Arc<
let start_handshake = match acceptor.await { let start_handshake = match acceptor.await {
Ok(sh) => sh, Ok(sh) => sh,
Err(e) => { Err(e) => {
warn!(peer = %peer, error = %e, "TLS accept error"); return warn!(peer = %peer, error = %e, "TLS accept error");
return;
} }
}; };
let mut tls_stream = match start_handshake.into_stream(tls_config).await { let mut tls_stream = match start_handshake.into_stream(tls_config).await {
Ok(s) => s, Ok(s) => s,
Err(e) => { Err(e) => {
warn!(peer = %peer, error = %e, "TLS handshake error"); return warn!(peer = %peer, error = %e, "TLS handshake error");
return;
} }
}; };
let (_, conn) = tls_stream.get_ref();
info!(
cipher = ?conn.negotiated_cipher_suite(),
version = ?conn.protocol_version(),
"connection established"
);
loop { loop {
let payload_size = match read_request(&mut tls_stream).await { let payload_size = match read_request(&mut tls_stream).await {
Ok(size) => size, Ok(size) => size,