1 /* $OpenBSD: tls13_server.c,v 1.106 2023/06/10 15:34:36 tb Exp $ */ 2 /* 3 * Copyright (c) 2019, 2020 Joel Sing <jsing@openbsd.org> 4 * Copyright (c) 2020 Bob Beck <beck@openbsd.org> 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 #include <openssl/x509v3.h> 20 21 #include "ssl_local.h" 22 #include "ssl_sigalgs.h" 23 #include "ssl_tlsext.h" 24 #include "tls13_handshake.h" 25 #include "tls13_internal.h" 26 27 int 28 tls13_server_init(struct tls13_ctx *ctx) 29 { 30 SSL *s = ctx->ssl; 31 32 if (!ssl_supported_tls_version_range(s, &ctx->hs->our_min_tls_version, 33 &ctx->hs->our_max_tls_version)) { 34 SSLerror(s, SSL_R_NO_PROTOCOLS_AVAILABLE); 35 return 0; 36 } 37 s->version = ctx->hs->our_max_tls_version; 38 39 tls13_record_layer_set_retry_after_phh(ctx->rl, 40 (s->mode & SSL_MODE_AUTO_RETRY) != 0); 41 42 if (!ssl_get_new_session(s, 0)) /* XXX */ 43 return 0; 44 45 tls13_record_layer_set_legacy_version(ctx->rl, TLS1_VERSION); 46 47 if (!tls1_transcript_init(s)) 48 return 0; 49 50 arc4random_buf(s->s3->server_random, SSL3_RANDOM_SIZE); 51 52 return 1; 53 } 54 55 int 56 tls13_server_accept(struct tls13_ctx *ctx) 57 { 58 if (ctx->mode != TLS13_HS_SERVER) 59 return TLS13_IO_FAILURE; 60 61 return tls13_handshake_perform(ctx); 62 } 63 64 static int 65 tls13_client_hello_is_legacy(CBS *cbs) 66 { 67 CBS extensions_block, extensions, extension_data, versions; 68 uint16_t version, max_version = 0; 69 uint16_t type; 70 71 CBS_dup(cbs, &extensions_block); 72 73 if (!CBS_get_u16_length_prefixed(&extensions_block, &extensions)) 74 return 1; 75 76 while (CBS_len(&extensions) > 0) { 77 if (!CBS_get_u16(&extensions, &type)) 78 return 1; 79 if (!CBS_get_u16_length_prefixed(&extensions, &extension_data)) 80 return 1; 81 82 if (type != TLSEXT_TYPE_supported_versions) 83 continue; 84 if (!CBS_get_u8_length_prefixed(&extension_data, &versions)) 85 return 1; 86 while (CBS_len(&versions) > 0) { 87 if (!CBS_get_u16(&versions, &version)) 88 return 1; 89 if (version >= max_version) 90 max_version = version; 91 } 92 if (CBS_len(&extension_data) != 0) 93 return 1; 94 } 95 96 return (max_version < TLS1_3_VERSION); 97 } 98 99 int 100 tls13_client_hello_required_extensions(struct tls13_ctx *ctx) 101 { 102 SSL *s = ctx->ssl; 103 104 /* 105 * RFC 8446, section 9.2. If the ClientHello has supported_versions 106 * containing TLSv1.3, presence or absence of some extensions requires 107 * presence or absence of others. 108 */ 109 110 /* 111 * RFC 8446 section 4.2.9 - if we received a pre_shared_key, then we 112 * also need psk_key_exchange_modes. Otherwise, section 9.2 specifies 113 * that we need both signature_algorithms and supported_groups. 114 */ 115 if (tlsext_extension_seen(s, TLSEXT_TYPE_pre_shared_key)) { 116 if (!tlsext_extension_seen(s, 117 TLSEXT_TYPE_psk_key_exchange_modes)) 118 return 0; 119 } else { 120 if (!tlsext_extension_seen(s, TLSEXT_TYPE_signature_algorithms)) 121 return 0; 122 if (!tlsext_extension_seen(s, TLSEXT_TYPE_supported_groups)) 123 return 0; 124 } 125 126 /* 127 * supported_groups and key_share must either both be present or 128 * both be absent. 129 */ 130 if (tlsext_extension_seen(s, TLSEXT_TYPE_supported_groups) != 131 tlsext_extension_seen(s, TLSEXT_TYPE_key_share)) 132 return 0; 133 134 /* 135 * XXX - Require server_name from client? If so, we SHOULD enforce 136 * this here - RFC 8446, 9.2. 137 */ 138 139 return 1; 140 } 141 142 static const uint8_t tls13_compression_null_only[] = { 0 }; 143 144 static int 145 tls13_client_hello_process(struct tls13_ctx *ctx, CBS *cbs) 146 { 147 CBS cipher_suites, client_random, compression_methods, session_id; 148 STACK_OF(SSL_CIPHER) *ciphers = NULL; 149 const SSL_CIPHER *cipher; 150 uint16_t legacy_version; 151 int alert_desc; 152 SSL *s = ctx->ssl; 153 int ret = 0; 154 155 if (!CBS_get_u16(cbs, &legacy_version)) 156 goto err; 157 if (!CBS_get_bytes(cbs, &client_random, SSL3_RANDOM_SIZE)) 158 goto err; 159 if (!CBS_get_u8_length_prefixed(cbs, &session_id)) 160 goto err; 161 if (!CBS_get_u16_length_prefixed(cbs, &cipher_suites)) 162 goto err; 163 if (!CBS_get_u8_length_prefixed(cbs, &compression_methods)) 164 goto err; 165 166 if (tls13_client_hello_is_legacy(cbs) || s->version < TLS1_3_VERSION) { 167 if (!CBS_skip(cbs, CBS_len(cbs))) 168 goto err; 169 return tls13_use_legacy_server(ctx); 170 } 171 ctx->hs->negotiated_tls_version = TLS1_3_VERSION; 172 ctx->hs->peer_legacy_version = legacy_version; 173 174 /* Ensure we send subsequent alerts with the correct record version. */ 175 tls13_record_layer_set_legacy_version(ctx->rl, TLS1_2_VERSION); 176 177 /* 178 * Ensure that the client has not requested middlebox compatibility mode 179 * if it is prohibited from doing so. 180 */ 181 if (!ctx->middlebox_compat && CBS_len(&session_id) != 0) { 182 ctx->alert = TLS13_ALERT_ILLEGAL_PARAMETER; 183 goto err; 184 } 185 186 /* Add decoded values to the current ClientHello hash */ 187 if (!tls13_clienthello_hash_init(ctx)) { 188 ctx->alert = TLS13_ALERT_INTERNAL_ERROR; 189 goto err; 190 } 191 if (!tls13_clienthello_hash_update_bytes(ctx, (void *)&legacy_version, 192 sizeof(legacy_version))) { 193 ctx->alert = TLS13_ALERT_INTERNAL_ERROR; 194 goto err; 195 } 196 if (!tls13_clienthello_hash_update(ctx, &client_random)) { 197 ctx->alert = TLS13_ALERT_INTERNAL_ERROR; 198 goto err; 199 } 200 if (!tls13_clienthello_hash_update(ctx, &session_id)) { 201 ctx->alert = TLS13_ALERT_INTERNAL_ERROR; 202 goto err; 203 } 204 if (!tls13_clienthello_hash_update(ctx, &cipher_suites)) { 205 ctx->alert = TLS13_ALERT_INTERNAL_ERROR; 206 goto err; 207 } 208 if (!tls13_clienthello_hash_update(ctx, &compression_methods)) { 209 ctx->alert = TLS13_ALERT_INTERNAL_ERROR; 210 goto err; 211 } 212 213 if (!tlsext_server_parse(s, SSL_TLSEXT_MSG_CH, cbs, &alert_desc)) { 214 ctx->alert = alert_desc; 215 goto err; 216 } 217 218 /* Finalize first ClientHello hash, or validate against it */ 219 if (!ctx->hs->tls13.hrr) { 220 if (!tls13_clienthello_hash_finalize(ctx)) { 221 ctx->alert = TLS13_ALERT_INTERNAL_ERROR; 222 goto err; 223 } 224 } else { 225 if (!tls13_clienthello_hash_validate(ctx)) { 226 ctx->alert = TLS13_ALERT_ILLEGAL_PARAMETER; 227 goto err; 228 } 229 tls13_clienthello_hash_clear(&ctx->hs->tls13); 230 } 231 232 if (!tls13_client_hello_required_extensions(ctx)) { 233 ctx->alert = TLS13_ALERT_MISSING_EXTENSION; 234 goto err; 235 } 236 237 /* 238 * If we got this far we have a supported versions extension that offers 239 * TLS 1.3 or later. This requires the legacy version be set to 0x0303. 240 */ 241 if (legacy_version != TLS1_2_VERSION) { 242 ctx->alert = TLS13_ALERT_PROTOCOL_VERSION; 243 goto err; 244 } 245 246 /* 247 * The legacy session identifier must either be zero length or a 32 byte 248 * value (in which case the client is requesting middlebox compatibility 249 * mode), as per RFC 8446 section 4.1.2. If it is valid, store the value 250 * so that we can echo it back to the client. 251 */ 252 if (CBS_len(&session_id) != 0 && 253 CBS_len(&session_id) != sizeof(ctx->hs->tls13.legacy_session_id)) { 254 ctx->alert = TLS13_ALERT_ILLEGAL_PARAMETER; 255 goto err; 256 } 257 if (!CBS_write_bytes(&session_id, ctx->hs->tls13.legacy_session_id, 258 sizeof(ctx->hs->tls13.legacy_session_id), 259 &ctx->hs->tls13.legacy_session_id_len)) { 260 ctx->alert = TLS13_ALERT_INTERNAL_ERROR; 261 goto err; 262 } 263 264 /* Parse cipher suites list and select preferred cipher. */ 265 if ((ciphers = ssl_bytes_to_cipher_list(s, &cipher_suites)) == NULL) { 266 ctx->alert = TLS13_ALERT_ILLEGAL_PARAMETER; 267 goto err; 268 } 269 cipher = ssl3_choose_cipher(s, ciphers, SSL_get_ciphers(s)); 270 if (cipher == NULL) { 271 tls13_set_errorx(ctx, TLS13_ERR_NO_SHARED_CIPHER, 0, 272 "no shared cipher found", NULL); 273 ctx->alert = TLS13_ALERT_HANDSHAKE_FAILURE; 274 goto err; 275 } 276 ctx->hs->cipher = cipher; 277 278 sk_SSL_CIPHER_free(s->session->ciphers); 279 s->session->ciphers = ciphers; 280 ciphers = NULL; 281 282 /* Ensure only the NULL compression method is advertised. */ 283 if (!CBS_mem_equal(&compression_methods, tls13_compression_null_only, 284 sizeof(tls13_compression_null_only))) { 285 ctx->alert = TLS13_ALERT_ILLEGAL_PARAMETER; 286 goto err; 287 } 288 289 ret = 1; 290 291 err: 292 sk_SSL_CIPHER_free(ciphers); 293 294 return ret; 295 } 296 297 int 298 tls13_client_hello_recv(struct tls13_ctx *ctx, CBS *cbs) 299 { 300 SSL *s = ctx->ssl; 301 302 if (!tls13_client_hello_process(ctx, cbs)) 303 goto err; 304 305 /* See if we switched back to the legacy client method. */ 306 if (s->method->version < TLS1_3_VERSION) 307 return 1; 308 309 /* 310 * If a matching key share was provided, we do not need to send a 311 * HelloRetryRequest. 312 */ 313 /* 314 * XXX - ideally NEGOTIATED would only be added after record protection 315 * has been enabled. This would probably mean using either an 316 * INITIAL | WITHOUT_HRR state, or another intermediate state. 317 */ 318 if (ctx->hs->key_share != NULL) 319 ctx->handshake_stage.hs_type |= NEGOTIATED | WITHOUT_HRR; 320 321 tls13_record_layer_allow_ccs(ctx->rl, 1); 322 323 return 1; 324 325 err: 326 return 0; 327 } 328 329 static int 330 tls13_server_hello_build(struct tls13_ctx *ctx, CBB *cbb, int hrr) 331 { 332 uint16_t tlsext_msg_type = SSL_TLSEXT_MSG_SH; 333 const uint8_t *server_random; 334 CBB session_id; 335 SSL *s = ctx->ssl; 336 uint16_t cipher; 337 338 cipher = SSL_CIPHER_get_value(ctx->hs->cipher); 339 server_random = s->s3->server_random; 340 341 if (hrr) { 342 server_random = tls13_hello_retry_request_hash; 343 tlsext_msg_type = SSL_TLSEXT_MSG_HRR; 344 } 345 346 if (!CBB_add_u16(cbb, TLS1_2_VERSION)) 347 goto err; 348 if (!CBB_add_bytes(cbb, server_random, SSL3_RANDOM_SIZE)) 349 goto err; 350 if (!CBB_add_u8_length_prefixed(cbb, &session_id)) 351 goto err; 352 if (!CBB_add_bytes(&session_id, ctx->hs->tls13.legacy_session_id, 353 ctx->hs->tls13.legacy_session_id_len)) 354 goto err; 355 if (!CBB_add_u16(cbb, cipher)) 356 goto err; 357 if (!CBB_add_u8(cbb, 0)) 358 goto err; 359 if (!tlsext_server_build(s, tlsext_msg_type, cbb)) 360 goto err; 361 362 if (!CBB_flush(cbb)) 363 goto err; 364 365 return 1; 366 err: 367 return 0; 368 } 369 370 static int 371 tls13_server_engage_record_protection(struct tls13_ctx *ctx) 372 { 373 struct tls13_secrets *secrets; 374 struct tls13_secret context; 375 unsigned char buf[EVP_MAX_MD_SIZE]; 376 uint8_t *shared_key = NULL; 377 size_t shared_key_len = 0; 378 size_t hash_len; 379 SSL *s = ctx->ssl; 380 int ret = 0; 381 382 if (!tls_key_share_derive(ctx->hs->key_share, &shared_key, 383 &shared_key_len)) 384 goto err; 385 386 s->session->cipher = ctx->hs->cipher; 387 388 if ((ctx->aead = tls13_cipher_aead(ctx->hs->cipher)) == NULL) 389 goto err; 390 if ((ctx->hash = tls13_cipher_hash(ctx->hs->cipher)) == NULL) 391 goto err; 392 393 if ((secrets = tls13_secrets_create(ctx->hash, 0)) == NULL) 394 goto err; 395 ctx->hs->tls13.secrets = secrets; 396 397 /* XXX - pass in hash. */ 398 if (!tls1_transcript_hash_init(s)) 399 goto err; 400 tls1_transcript_free(s); 401 if (!tls1_transcript_hash_value(s, buf, sizeof(buf), &hash_len)) 402 goto err; 403 context.data = buf; 404 context.len = hash_len; 405 406 /* Early secrets. */ 407 if (!tls13_derive_early_secrets(secrets, secrets->zeros.data, 408 secrets->zeros.len, &context)) 409 goto err; 410 411 /* Handshake secrets. */ 412 if (!tls13_derive_handshake_secrets(ctx->hs->tls13.secrets, shared_key, 413 shared_key_len, &context)) 414 goto err; 415 416 tls13_record_layer_set_aead(ctx->rl, ctx->aead); 417 tls13_record_layer_set_hash(ctx->rl, ctx->hash); 418 419 if (!tls13_record_layer_set_read_traffic_key(ctx->rl, 420 &secrets->client_handshake_traffic, ssl_encryption_handshake)) 421 goto err; 422 if (!tls13_record_layer_set_write_traffic_key(ctx->rl, 423 &secrets->server_handshake_traffic, ssl_encryption_handshake)) 424 goto err; 425 426 ctx->handshake_stage.hs_type |= NEGOTIATED; 427 if (!(SSL_get_verify_mode(s) & SSL_VERIFY_PEER)) 428 ctx->handshake_stage.hs_type |= WITHOUT_CR; 429 430 ret = 1; 431 432 err: 433 freezero(shared_key, shared_key_len); 434 return ret; 435 } 436 437 int 438 tls13_server_hello_retry_request_send(struct tls13_ctx *ctx, CBB *cbb) 439 { 440 int nid; 441 442 ctx->hs->tls13.hrr = 1; 443 444 if (!tls13_synthetic_handshake_message(ctx)) 445 return 0; 446 447 if (ctx->hs->key_share != NULL) 448 return 0; 449 if (!tls1_get_supported_group(ctx->ssl, &nid)) 450 return 0; 451 if (!tls1_ec_nid2group_id(nid, &ctx->hs->tls13.server_group)) 452 return 0; 453 454 if (!tls13_server_hello_build(ctx, cbb, 1)) 455 return 0; 456 457 return 1; 458 } 459 460 int 461 tls13_server_hello_retry_request_sent(struct tls13_ctx *ctx) 462 { 463 /* 464 * If the client has requested middlebox compatibility mode, 465 * we MUST send a dummy CCS following our first handshake message. 466 * See RFC 8446 Appendix D.4. 467 */ 468 if (ctx->hs->tls13.legacy_session_id_len > 0) 469 ctx->send_dummy_ccs_after = 1; 470 471 return 1; 472 } 473 474 int 475 tls13_client_hello_retry_recv(struct tls13_ctx *ctx, CBS *cbs) 476 { 477 SSL *s = ctx->ssl; 478 479 if (!tls13_client_hello_process(ctx, cbs)) 480 return 0; 481 482 /* XXX - need further checks. */ 483 if (s->method->version < TLS1_3_VERSION) 484 return 0; 485 486 ctx->hs->tls13.hrr = 0; 487 488 return 1; 489 } 490 491 static int 492 tls13_servername_process(struct tls13_ctx *ctx) 493 { 494 uint8_t alert = TLS13_ALERT_INTERNAL_ERROR; 495 496 if (!tls13_legacy_servername_process(ctx, &alert)) { 497 ctx->alert = alert; 498 return 0; 499 } 500 501 return 1; 502 } 503 504 int 505 tls13_server_hello_send(struct tls13_ctx *ctx, CBB *cbb) 506 { 507 if (ctx->hs->key_share == NULL) 508 return 0; 509 if (!tls_key_share_generate(ctx->hs->key_share)) 510 return 0; 511 if (!tls13_servername_process(ctx)) 512 return 0; 513 514 ctx->hs->tls13.server_group = 0; 515 516 if (!tls13_server_hello_build(ctx, cbb, 0)) 517 return 0; 518 519 return 1; 520 } 521 522 int 523 tls13_server_hello_sent(struct tls13_ctx *ctx) 524 { 525 /* 526 * If the client has requested middlebox compatibility mode, 527 * we MUST send a dummy CCS following our first handshake message. 528 * See RFC 8446 Appendix D.4. 529 */ 530 if ((ctx->handshake_stage.hs_type & WITHOUT_HRR) && 531 ctx->hs->tls13.legacy_session_id_len > 0) 532 ctx->send_dummy_ccs_after = 1; 533 534 return tls13_server_engage_record_protection(ctx); 535 } 536 537 int 538 tls13_server_encrypted_extensions_send(struct tls13_ctx *ctx, CBB *cbb) 539 { 540 if (!tlsext_server_build(ctx->ssl, SSL_TLSEXT_MSG_EE, cbb)) 541 goto err; 542 543 return 1; 544 err: 545 return 0; 546 } 547 548 int 549 tls13_server_certificate_request_send(struct tls13_ctx *ctx, CBB *cbb) 550 { 551 CBB certificate_request_context; 552 553 if (!CBB_add_u8_length_prefixed(cbb, &certificate_request_context)) 554 goto err; 555 if (!tlsext_server_build(ctx->ssl, SSL_TLSEXT_MSG_CR, cbb)) 556 goto err; 557 558 if (!CBB_flush(cbb)) 559 goto err; 560 561 return 1; 562 err: 563 return 0; 564 } 565 566 static int 567 tls13_server_check_certificate(struct tls13_ctx *ctx, SSL_CERT_PKEY *cpk, 568 int *ok, const struct ssl_sigalg **out_sigalg) 569 { 570 const struct ssl_sigalg *sigalg; 571 SSL *s = ctx->ssl; 572 573 *ok = 0; 574 *out_sigalg = NULL; 575 576 if (cpk->x509 == NULL || cpk->privatekey == NULL) 577 goto done; 578 579 /* 580 * The digitalSignature bit MUST be set if the Key Usage extension is 581 * present as per RFC 8446 section 4.4.2.2. 582 */ 583 if (!(X509_get_key_usage(cpk->x509) & X509v3_KU_DIGITAL_SIGNATURE)) 584 goto done; 585 586 if ((sigalg = ssl_sigalg_select(s, cpk->privatekey)) == NULL) 587 goto done; 588 589 *ok = 1; 590 *out_sigalg = sigalg; 591 592 done: 593 return 1; 594 } 595 596 static int 597 tls13_server_select_certificate(struct tls13_ctx *ctx, SSL_CERT_PKEY **out_cpk, 598 const struct ssl_sigalg **out_sigalg) 599 { 600 SSL *s = ctx->ssl; 601 const struct ssl_sigalg *sigalg; 602 SSL_CERT_PKEY *cpk; 603 int cert_ok; 604 605 *out_cpk = NULL; 606 *out_sigalg = NULL; 607 608 cpk = &s->cert->pkeys[SSL_PKEY_ECC]; 609 if (!tls13_server_check_certificate(ctx, cpk, &cert_ok, &sigalg)) 610 return 0; 611 if (cert_ok) 612 goto done; 613 614 cpk = &s->cert->pkeys[SSL_PKEY_RSA]; 615 if (!tls13_server_check_certificate(ctx, cpk, &cert_ok, &sigalg)) 616 return 0; 617 if (cert_ok) 618 goto done; 619 620 cpk = NULL; 621 sigalg = NULL; 622 623 done: 624 *out_cpk = cpk; 625 *out_sigalg = sigalg; 626 627 return 1; 628 } 629 630 int 631 tls13_server_certificate_send(struct tls13_ctx *ctx, CBB *cbb) 632 { 633 SSL *s = ctx->ssl; 634 CBB cert_request_context, cert_list; 635 const struct ssl_sigalg *sigalg; 636 X509_STORE_CTX *xsc = NULL; 637 STACK_OF(X509) *chain; 638 SSL_CERT_PKEY *cpk; 639 X509 *cert; 640 int i, ret = 0; 641 642 if (!tls13_server_select_certificate(ctx, &cpk, &sigalg)) 643 goto err; 644 645 if (cpk == NULL) { 646 /* A server must always provide a certificate. */ 647 ctx->alert = TLS13_ALERT_HANDSHAKE_FAILURE; 648 tls13_set_errorx(ctx, TLS13_ERR_NO_CERTIFICATE, 0, 649 "no server certificate", NULL); 650 goto err; 651 } 652 653 ctx->hs->tls13.cpk = cpk; 654 ctx->hs->our_sigalg = sigalg; 655 656 if ((chain = cpk->chain) == NULL) 657 chain = s->ctx->extra_certs; 658 659 if (chain == NULL && !(s->mode & SSL_MODE_NO_AUTO_CHAIN)) { 660 if ((xsc = X509_STORE_CTX_new()) == NULL) 661 goto err; 662 if (!X509_STORE_CTX_init(xsc, s->ctx->cert_store, cpk->x509, NULL)) 663 goto err; 664 X509_VERIFY_PARAM_set_flags(X509_STORE_CTX_get0_param(xsc), 665 X509_V_FLAG_LEGACY_VERIFY); 666 X509_verify_cert(xsc); 667 ERR_clear_error(); 668 chain = X509_STORE_CTX_get0_chain(xsc); 669 } 670 671 if (!CBB_add_u8_length_prefixed(cbb, &cert_request_context)) 672 goto err; 673 if (!CBB_add_u24_length_prefixed(cbb, &cert_list)) 674 goto err; 675 676 if (!tls13_cert_add(ctx, &cert_list, cpk->x509, tlsext_server_build)) 677 goto err; 678 679 for (i = 0; i < sk_X509_num(chain); i++) { 680 cert = sk_X509_value(chain, i); 681 682 /* 683 * In the case of auto chain, the leaf certificate will be at 684 * the top of the chain - skip over it as we've already added 685 * it earlier. 686 */ 687 if (i == 0 && cert == cpk->x509) 688 continue; 689 690 /* 691 * XXX we don't send extensions with chain certs to avoid sending 692 * a leaf ocsp staple with the chain certs. This needs to get 693 * fixed. 694 */ 695 if (!tls13_cert_add(ctx, &cert_list, cert, NULL)) 696 goto err; 697 } 698 699 if (!CBB_flush(cbb)) 700 goto err; 701 702 ret = 1; 703 704 err: 705 X509_STORE_CTX_free(xsc); 706 707 return ret; 708 } 709 710 int 711 tls13_server_certificate_verify_send(struct tls13_ctx *ctx, CBB *cbb) 712 { 713 const struct ssl_sigalg *sigalg; 714 uint8_t *sig = NULL, *sig_content = NULL; 715 size_t sig_len, sig_content_len; 716 EVP_MD_CTX *mdctx = NULL; 717 EVP_PKEY_CTX *pctx; 718 EVP_PKEY *pkey; 719 const SSL_CERT_PKEY *cpk; 720 CBB sig_cbb; 721 int ret = 0; 722 723 memset(&sig_cbb, 0, sizeof(sig_cbb)); 724 725 if ((cpk = ctx->hs->tls13.cpk) == NULL) 726 goto err; 727 if ((sigalg = ctx->hs->our_sigalg) == NULL) 728 goto err; 729 pkey = cpk->privatekey; 730 731 if (!CBB_init(&sig_cbb, 0)) 732 goto err; 733 if (!CBB_add_bytes(&sig_cbb, tls13_cert_verify_pad, 734 sizeof(tls13_cert_verify_pad))) 735 goto err; 736 if (!CBB_add_bytes(&sig_cbb, tls13_cert_server_verify_context, 737 strlen(tls13_cert_server_verify_context))) 738 goto err; 739 if (!CBB_add_u8(&sig_cbb, 0)) 740 goto err; 741 if (!CBB_add_bytes(&sig_cbb, ctx->hs->tls13.transcript_hash, 742 ctx->hs->tls13.transcript_hash_len)) 743 goto err; 744 if (!CBB_finish(&sig_cbb, &sig_content, &sig_content_len)) 745 goto err; 746 747 if ((mdctx = EVP_MD_CTX_new()) == NULL) 748 goto err; 749 if (!EVP_DigestSignInit(mdctx, &pctx, sigalg->md(), NULL, pkey)) 750 goto err; 751 if (sigalg->flags & SIGALG_FLAG_RSA_PSS) { 752 if (!EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING)) 753 goto err; 754 if (!EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, -1)) 755 goto err; 756 } 757 if (!EVP_DigestSign(mdctx, NULL, &sig_len, sig_content, sig_content_len)) 758 goto err; 759 if ((sig = calloc(1, sig_len)) == NULL) 760 goto err; 761 if (!EVP_DigestSign(mdctx, sig, &sig_len, sig_content, sig_content_len)) 762 goto err; 763 764 if (!CBB_add_u16(cbb, sigalg->value)) 765 goto err; 766 if (!CBB_add_u16_length_prefixed(cbb, &sig_cbb)) 767 goto err; 768 if (!CBB_add_bytes(&sig_cbb, sig, sig_len)) 769 goto err; 770 771 if (!CBB_flush(cbb)) 772 goto err; 773 774 ret = 1; 775 776 err: 777 if (!ret && ctx->alert == 0) 778 ctx->alert = TLS13_ALERT_INTERNAL_ERROR; 779 780 CBB_cleanup(&sig_cbb); 781 EVP_MD_CTX_free(mdctx); 782 free(sig_content); 783 free(sig); 784 785 return ret; 786 } 787 788 int 789 tls13_server_finished_send(struct tls13_ctx *ctx, CBB *cbb) 790 { 791 struct tls13_secrets *secrets = ctx->hs->tls13.secrets; 792 struct tls13_secret context = { .data = "", .len = 0 }; 793 struct tls13_secret finished_key = { .data = NULL, .len = 0 } ; 794 uint8_t transcript_hash[EVP_MAX_MD_SIZE]; 795 size_t transcript_hash_len; 796 uint8_t *verify_data; 797 size_t verify_data_len; 798 unsigned int hlen; 799 HMAC_CTX *hmac_ctx = NULL; 800 CBS cbs; 801 int ret = 0; 802 803 if (!tls13_secret_init(&finished_key, EVP_MD_size(ctx->hash))) 804 goto err; 805 806 if (!tls13_hkdf_expand_label(&finished_key, ctx->hash, 807 &secrets->server_handshake_traffic, "finished", 808 &context)) 809 goto err; 810 811 if (!tls1_transcript_hash_value(ctx->ssl, transcript_hash, 812 sizeof(transcript_hash), &transcript_hash_len)) 813 goto err; 814 815 if ((hmac_ctx = HMAC_CTX_new()) == NULL) 816 goto err; 817 if (!HMAC_Init_ex(hmac_ctx, finished_key.data, finished_key.len, 818 ctx->hash, NULL)) 819 goto err; 820 if (!HMAC_Update(hmac_ctx, transcript_hash, transcript_hash_len)) 821 goto err; 822 823 verify_data_len = HMAC_size(hmac_ctx); 824 if (!CBB_add_space(cbb, &verify_data, verify_data_len)) 825 goto err; 826 if (!HMAC_Final(hmac_ctx, verify_data, &hlen)) 827 goto err; 828 if (hlen != verify_data_len) 829 goto err; 830 831 CBS_init(&cbs, verify_data, verify_data_len); 832 if (!CBS_write_bytes(&cbs, ctx->hs->finished, 833 sizeof(ctx->hs->finished), &ctx->hs->finished_len)) 834 goto err; 835 836 ret = 1; 837 838 err: 839 tls13_secret_cleanup(&finished_key); 840 HMAC_CTX_free(hmac_ctx); 841 842 return ret; 843 } 844 845 int 846 tls13_server_finished_sent(struct tls13_ctx *ctx) 847 { 848 struct tls13_secrets *secrets = ctx->hs->tls13.secrets; 849 struct tls13_secret context = { .data = "", .len = 0 }; 850 851 /* 852 * Derive application traffic keys. 853 */ 854 context.data = ctx->hs->tls13.transcript_hash; 855 context.len = ctx->hs->tls13.transcript_hash_len; 856 857 if (!tls13_derive_application_secrets(secrets, &context)) 858 return 0; 859 860 /* 861 * Any records following the server finished message must be encrypted 862 * using the server application traffic keys. 863 */ 864 return tls13_record_layer_set_write_traffic_key(ctx->rl, 865 &secrets->server_application_traffic, ssl_encryption_application); 866 } 867 868 int 869 tls13_client_certificate_recv(struct tls13_ctx *ctx, CBS *cbs) 870 { 871 CBS cert_request_context, cert_list, cert_data, cert_exts; 872 struct stack_st_X509 *certs = NULL; 873 SSL *s = ctx->ssl; 874 X509 *cert = NULL; 875 const uint8_t *p; 876 int ret = 0; 877 878 if (!CBS_get_u8_length_prefixed(cbs, &cert_request_context)) 879 goto err; 880 if (CBS_len(&cert_request_context) != 0) 881 goto err; 882 if (!CBS_get_u24_length_prefixed(cbs, &cert_list)) 883 goto err; 884 if (CBS_len(&cert_list) == 0) { 885 if (!(s->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT)) 886 return 1; 887 ctx->alert = TLS13_ALERT_CERTIFICATE_REQUIRED; 888 tls13_set_errorx(ctx, TLS13_ERR_NO_PEER_CERTIFICATE, 0, 889 "peer did not provide a certificate", NULL); 890 goto err; 891 } 892 893 if ((certs = sk_X509_new_null()) == NULL) 894 goto err; 895 while (CBS_len(&cert_list) > 0) { 896 if (!CBS_get_u24_length_prefixed(&cert_list, &cert_data)) 897 goto err; 898 if (!CBS_get_u16_length_prefixed(&cert_list, &cert_exts)) 899 goto err; 900 901 p = CBS_data(&cert_data); 902 if ((cert = d2i_X509(NULL, &p, CBS_len(&cert_data))) == NULL) 903 goto err; 904 if (p != CBS_data(&cert_data) + CBS_len(&cert_data)) 905 goto err; 906 907 if (!sk_X509_push(certs, cert)) 908 goto err; 909 910 cert = NULL; 911 } 912 913 /* 914 * At this stage we still have no proof of possession. As such, it would 915 * be preferable to keep the chain and verify once we have successfully 916 * processed the CertificateVerify message. 917 */ 918 if (ssl_verify_cert_chain(s, certs) <= 0) { 919 ctx->alert = ssl_verify_alarm_type(s->verify_result); 920 tls13_set_errorx(ctx, TLS13_ERR_VERIFY_FAILED, 0, 921 "failed to verify peer certificate", NULL); 922 goto err; 923 } 924 s->session->verify_result = s->verify_result; 925 ERR_clear_error(); 926 927 if (!tls_process_peer_certs(s, certs)) 928 goto err; 929 930 ctx->handshake_stage.hs_type |= WITH_CCV; 931 ret = 1; 932 933 err: 934 sk_X509_pop_free(certs, X509_free); 935 X509_free(cert); 936 937 return ret; 938 } 939 940 int 941 tls13_client_certificate_verify_recv(struct tls13_ctx *ctx, CBS *cbs) 942 { 943 const struct ssl_sigalg *sigalg; 944 uint16_t signature_scheme; 945 uint8_t *sig_content = NULL; 946 size_t sig_content_len; 947 EVP_MD_CTX *mdctx = NULL; 948 EVP_PKEY_CTX *pctx; 949 EVP_PKEY *pkey; 950 X509 *cert; 951 CBS signature; 952 CBB cbb; 953 int ret = 0; 954 955 memset(&cbb, 0, sizeof(cbb)); 956 957 if (!CBS_get_u16(cbs, &signature_scheme)) 958 goto err; 959 if (!CBS_get_u16_length_prefixed(cbs, &signature)) 960 goto err; 961 962 if (!CBB_init(&cbb, 0)) 963 goto err; 964 if (!CBB_add_bytes(&cbb, tls13_cert_verify_pad, 965 sizeof(tls13_cert_verify_pad))) 966 goto err; 967 if (!CBB_add_bytes(&cbb, tls13_cert_client_verify_context, 968 strlen(tls13_cert_client_verify_context))) 969 goto err; 970 if (!CBB_add_u8(&cbb, 0)) 971 goto err; 972 if (!CBB_add_bytes(&cbb, ctx->hs->tls13.transcript_hash, 973 ctx->hs->tls13.transcript_hash_len)) 974 goto err; 975 if (!CBB_finish(&cbb, &sig_content, &sig_content_len)) 976 goto err; 977 978 if ((cert = ctx->ssl->session->peer_cert) == NULL) 979 goto err; 980 if ((pkey = X509_get0_pubkey(cert)) == NULL) 981 goto err; 982 if ((sigalg = ssl_sigalg_for_peer(ctx->ssl, pkey, 983 signature_scheme)) == NULL) 984 goto err; 985 ctx->hs->peer_sigalg = sigalg; 986 987 if (CBS_len(&signature) > EVP_PKEY_size(pkey)) 988 goto err; 989 990 if ((mdctx = EVP_MD_CTX_new()) == NULL) 991 goto err; 992 if (!EVP_DigestVerifyInit(mdctx, &pctx, sigalg->md(), NULL, pkey)) 993 goto err; 994 if (sigalg->flags & SIGALG_FLAG_RSA_PSS) { 995 if (!EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING)) 996 goto err; 997 if (!EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, -1)) 998 goto err; 999 } 1000 if (EVP_DigestVerify(mdctx, CBS_data(&signature), CBS_len(&signature), 1001 sig_content, sig_content_len) <= 0) { 1002 ctx->alert = TLS13_ALERT_DECRYPT_ERROR; 1003 goto err; 1004 } 1005 1006 ret = 1; 1007 1008 err: 1009 if (!ret && ctx->alert == 0) 1010 ctx->alert = TLS13_ALERT_DECODE_ERROR; 1011 1012 CBB_cleanup(&cbb); 1013 EVP_MD_CTX_free(mdctx); 1014 free(sig_content); 1015 1016 return ret; 1017 } 1018 1019 int 1020 tls13_client_end_of_early_data_recv(struct tls13_ctx *ctx, CBS *cbs) 1021 { 1022 return 0; 1023 } 1024 1025 int 1026 tls13_client_finished_recv(struct tls13_ctx *ctx, CBS *cbs) 1027 { 1028 struct tls13_secrets *secrets = ctx->hs->tls13.secrets; 1029 struct tls13_secret context = { .data = "", .len = 0 }; 1030 struct tls13_secret finished_key; 1031 uint8_t *verify_data = NULL; 1032 size_t verify_data_len; 1033 uint8_t key[EVP_MAX_MD_SIZE]; 1034 HMAC_CTX *hmac_ctx = NULL; 1035 unsigned int hlen; 1036 int ret = 0; 1037 1038 /* 1039 * Verify client finished. 1040 */ 1041 finished_key.data = key; 1042 finished_key.len = EVP_MD_size(ctx->hash); 1043 1044 if (!tls13_hkdf_expand_label(&finished_key, ctx->hash, 1045 &secrets->client_handshake_traffic, "finished", 1046 &context)) 1047 goto err; 1048 1049 if ((hmac_ctx = HMAC_CTX_new()) == NULL) 1050 goto err; 1051 if (!HMAC_Init_ex(hmac_ctx, finished_key.data, finished_key.len, 1052 ctx->hash, NULL)) 1053 goto err; 1054 if (!HMAC_Update(hmac_ctx, ctx->hs->tls13.transcript_hash, 1055 ctx->hs->tls13.transcript_hash_len)) 1056 goto err; 1057 verify_data_len = HMAC_size(hmac_ctx); 1058 if ((verify_data = calloc(1, verify_data_len)) == NULL) 1059 goto err; 1060 if (!HMAC_Final(hmac_ctx, verify_data, &hlen)) 1061 goto err; 1062 if (hlen != verify_data_len) 1063 goto err; 1064 1065 if (!CBS_mem_equal(cbs, verify_data, verify_data_len)) { 1066 ctx->alert = TLS13_ALERT_DECRYPT_ERROR; 1067 goto err; 1068 } 1069 1070 if (!CBS_write_bytes(cbs, ctx->hs->peer_finished, 1071 sizeof(ctx->hs->peer_finished), 1072 &ctx->hs->peer_finished_len)) 1073 goto err; 1074 1075 if (!CBS_skip(cbs, verify_data_len)) 1076 goto err; 1077 1078 /* 1079 * Any records following the client finished message must be encrypted 1080 * using the client application traffic keys. 1081 */ 1082 if (!tls13_record_layer_set_read_traffic_key(ctx->rl, 1083 &secrets->client_application_traffic, ssl_encryption_application)) 1084 goto err; 1085 1086 tls13_record_layer_allow_ccs(ctx->rl, 0); 1087 1088 ret = 1; 1089 1090 err: 1091 HMAC_CTX_free(hmac_ctx); 1092 free(verify_data); 1093 1094 return ret; 1095 } 1096