summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjsing <>2020-05-10 14:22:51 +0000
committerjsing <>2020-05-10 14:22:51 +0000
commite3c950e99fdc9bd1236909cca3074806223d651b (patch)
tree24ef4e392f9a47dd96a11297a8b36b4198afe23d
parent2c5bb57394ae3bd0d749e60f9e5489396e6f7d75 (diff)
downloadopenbsd-e3c950e99fdc9bd1236909cca3074806223d651b.tar.gz
openbsd-e3c950e99fdc9bd1236909cca3074806223d651b.tar.bz2
openbsd-e3c950e99fdc9bd1236909cca3074806223d651b.zip
Provide an easy way to get debug information from TLSv1.3 handshakes.
This makes it easier to debug TLSv1.3 handshake failures. "Yes please!" tb@, ok beck@
-rw-r--r--src/lib/libssl/Makefile5
-rw-r--r--src/lib/libssl/tls13_handshake.c59
2 files changed, 61 insertions, 3 deletions
diff --git a/src/lib/libssl/Makefile b/src/lib/libssl/Makefile
index 7631dd4cd4..d88e1e9a73 100644
--- a/src/lib/libssl/Makefile
+++ b/src/lib/libssl/Makefile
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile,v 1.64 2020/03/13 16:40:42 jsing Exp $ 1# $OpenBSD: Makefile,v 1.65 2020/05/10 14:22:51 jsing Exp $
2 2
3.include <bsd.own.mk> 3.include <bsd.own.mk>
4.ifndef NOMAN 4.ifndef NOMAN
@@ -20,6 +20,9 @@ CFLAGS+= -DLIBRESSL_INTERNAL
20CFLAGS+= -DLIBRESSL_HAS_TLS1_3_CLIENT 20CFLAGS+= -DLIBRESSL_HAS_TLS1_3_CLIENT
21CFLAGS+= -DLIBRESSL_HAS_TLS1_3_SERVER 21CFLAGS+= -DLIBRESSL_HAS_TLS1_3_SERVER
22.endif 22.endif
23.ifdef TLS1_3_DEBUG
24CFLAGS+= -DTLS13_DEBUG
25.endif
23CFLAGS+= -I${.CURDIR} 26CFLAGS+= -I${.CURDIR}
24 27
25LDADD+= -L${BSDOBJDIR}/lib/libcrypto -lcrypto 28LDADD+= -L${BSDOBJDIR}/lib/libcrypto -lcrypto
diff --git a/src/lib/libssl/tls13_handshake.c b/src/lib/libssl/tls13_handshake.c
index d3333a2e4a..1d8e78b927 100644
--- a/src/lib/libssl/tls13_handshake.c
+++ b/src/lib/libssl/tls13_handshake.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_handshake.c,v 1.59 2020/05/09 20:38:19 tb Exp $ */ 1/* $OpenBSD: tls13_handshake.c,v 1.60 2020/05/10 14:22:51 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2018-2019 Theo Buehler <tb@openbsd.org> 3 * Copyright (c) 2018-2019 Theo Buehler <tb@openbsd.org>
4 * Copyright (c) 2019 Joel Sing <jsing@openbsd.org> 4 * Copyright (c) 2019 Joel Sing <jsing@openbsd.org>
@@ -248,6 +248,52 @@ const enum tls13_message_type handshakes[][TLS13_NUM_MESSAGE_TYPES] = {
248 248
249const size_t handshake_count = sizeof(handshakes) / sizeof(handshakes[0]); 249const size_t handshake_count = sizeof(handshakes) / sizeof(handshakes[0]);
250 250
251#ifndef TLS13_DEBUG
252#define DEBUGF(...)
253#else
254#define DEBUGF(...) fprintf(stderr, __VA_ARGS__)
255
256static const char *
257tls13_handshake_mode_name(uint8_t mode)
258{
259 switch (mode) {
260 case TLS13_HS_CLIENT:
261 return "Client";
262 case TLS13_HS_SERVER:
263 return "Server";
264 }
265 return "Unknown";
266}
267
268static const char *
269tls13_handshake_message_name(uint8_t msg_type)
270{
271 switch (msg_type) {
272 case TLS13_MT_CLIENT_HELLO:
273 return "ClientHello";
274 case TLS13_MT_SERVER_HELLO:
275 return "ServerHello";
276 case TLS13_MT_NEW_SESSION_TICKET:
277 return "NewSessionTicket";
278 case TLS13_MT_END_OF_EARLY_DATA:
279 return "EndOfEarlyData";
280 case TLS13_MT_ENCRYPTED_EXTENSIONS:
281 return "EncryptedExtensions";
282 case TLS13_MT_CERTIFICATE:
283 return "Certificate";
284 case TLS13_MT_CERTIFICATE_REQUEST:
285 return "CertificateRequest";
286 case TLS13_MT_CERTIFICATE_VERIFY:
287 return "CertificateVerify";
288 case TLS13_MT_FINISHED:
289 return "Finished";
290 case TLS13_MT_KEY_UPDATE:
291 return "KeyUpdate";
292 }
293 return "Unknown";
294}
295#endif
296
251static const enum tls13_message_type 297static const enum tls13_message_type
252tls13_handshake_active_state(struct tls13_ctx *ctx) 298tls13_handshake_active_state(struct tls13_ctx *ctx)
253{ 299{
@@ -306,6 +352,10 @@ tls13_handshake_perform(struct tls13_ctx *ctx)
306 return TLS13_IO_SUCCESS; 352 return TLS13_IO_SUCCESS;
307 } 353 }
308 354
355 DEBUGF("%s %s %s\n", tls13_handshake_mode_name(ctx->mode),
356 (action->sender == ctx->mode) ? "sending" : "receiving",
357 tls13_handshake_message_name(action->handshake_type));
358
309 if (ctx->alert) 359 if (ctx->alert)
310 return tls13_send_alert(ctx->rl, ctx->alert); 360 return tls13_send_alert(ctx->rl, ctx->alert);
311 361
@@ -317,8 +367,13 @@ tls13_handshake_perform(struct tls13_ctx *ctx)
317 if (ctx->alert) 367 if (ctx->alert)
318 return tls13_send_alert(ctx->rl, ctx->alert); 368 return tls13_send_alert(ctx->rl, ctx->alert);
319 369
320 if (ret <= 0) 370 if (ret <= 0) {
371 DEBUGF("%s %s returned %d\n",
372 tls13_handshake_mode_name(ctx->mode),
373 (action->sender == ctx->mode) ? "send" : "recv",
374 ret);
321 return ret; 375 return ret;
376 }
322 377
323 if (!tls13_handshake_advance_state_machine(ctx)) 378 if (!tls13_handshake_advance_state_machine(ctx))
324 return TLS13_IO_FAILURE; 379 return TLS13_IO_FAILURE;