diff options
| author | beck <> | 2020-01-23 08:04:50 +0000 |
|---|---|---|
| committer | beck <> | 2020-01-23 08:04:50 +0000 |
| commit | 0a8bfef0e02ebe3b5600801ce49804de5f159f59 (patch) | |
| tree | 55e8702668822f1be79903aafff9d5d337551226 | |
| parent | ed73867a7fdf492c1302a217efba8999ce377f73 (diff) | |
| download | openbsd-0a8bfef0e02ebe3b5600801ce49804de5f159f59.tar.gz openbsd-0a8bfef0e02ebe3b5600801ce49804de5f159f59.tar.bz2 openbsd-0a8bfef0e02ebe3b5600801ce49804de5f159f59.zip | |
If we are building a legacy server hello, check to see if we are
downgrading from TLS 1.3. If we are, set the last 8 bytes of the
server_random value to the required values as per RFC 8446 section
4.1.3 indicating that we deliberately meant to downgrade.
ok jsing@
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libssl/ssl_srvr.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/lib/libssl/ssl_srvr.c b/src/lib/libssl/ssl_srvr.c index 809f589653..26b24f4f22 100644 --- a/src/lib/libssl/ssl_srvr.c +++ b/src/lib/libssl/ssl_srvr.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_srvr.c,v 1.68 2019/04/22 15:12:20 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_srvr.c,v 1.69 2020/01/23 08:04:50 beck Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -1042,6 +1042,25 @@ ssl3_get_client_hello(SSL *s) | |||
| 1042 | */ | 1042 | */ |
| 1043 | arc4random_buf(s->s3->server_random, SSL3_RANDOM_SIZE); | 1043 | arc4random_buf(s->s3->server_random, SSL3_RANDOM_SIZE); |
| 1044 | 1044 | ||
| 1045 | if (s->internal->tls13 != NULL) { | ||
| 1046 | /* | ||
| 1047 | * RFC 8446 section 4.1.3. If we are downgrading from TLS 1.3 | ||
| 1048 | * we must set the last 8 bytes of the server random to magical | ||
| 1049 | * values to indicate we meant to downgrade. | ||
| 1050 | */ | ||
| 1051 | size_t index = SSL3_RANDOM_SIZE - sizeof(tls13_downgrade_12); | ||
| 1052 | uint8_t *magic = &s->s3->server_random[index]; | ||
| 1053 | if (s->version == TLS1_2_VERSION) { | ||
| 1054 | /* Indicate we chose to downgrade to 1.2. */ | ||
| 1055 | memcpy(magic, tls13_downgrade_12, | ||
| 1056 | sizeof(tls13_downgrade_12)); | ||
| 1057 | } else { | ||
| 1058 | /* Indicate we chose to downgrade to 1.1 or lower */ | ||
| 1059 | memcpy(magic, tls13_downgrade_11, | ||
| 1060 | sizeof(tls13_downgrade_11)); | ||
| 1061 | } | ||
| 1062 | } | ||
| 1063 | |||
| 1045 | if (!s->internal->hit && s->internal->tls_session_secret_cb) { | 1064 | if (!s->internal->hit && s->internal->tls_session_secret_cb) { |
| 1046 | SSL_CIPHER *pref_cipher = NULL; | 1065 | SSL_CIPHER *pref_cipher = NULL; |
| 1047 | 1066 | ||
