You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1033 regels
34 KiB

  1. /* Copyright (c) 2016, Google Inc.
  2. *
  3. * Permission to use, copy, modify, and/or distribute this software for any
  4. * purpose with or without fee is hereby granted, provided that the above
  5. * copyright notice and this permission notice appear in all copies.
  6. *
  7. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  8. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  9. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
  10. * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  11. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
  12. * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  13. * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
  14. // Per C99, various stdint.h macros are unavailable in C++ unless some macros
  15. // are defined. C++11 overruled this decision, but older Android NDKs still
  16. // require it.
  17. #if !defined(__STDC_LIMIT_MACROS)
  18. #define __STDC_LIMIT_MACROS
  19. #endif
  20. #include <openssl/ssl.h>
  21. #include <assert.h>
  22. #include <string.h>
  23. #include <openssl/aead.h>
  24. #include <openssl/bytestring.h>
  25. #include <openssl/digest.h>
  26. #include <openssl/err.h>
  27. #include <openssl/mem.h>
  28. #include <openssl/rand.h>
  29. #include <openssl/stack.h>
  30. #include "../crypto/internal.h"
  31. #include "internal.h"
  32. BSSL_NAMESPACE_BEGIN
  33. enum server_hs_state_t {
  34. state_select_parameters = 0,
  35. state_select_session,
  36. state_send_hello_retry_request,
  37. state_read_second_client_hello,
  38. state_send_server_hello,
  39. state_send_server_certificate_verify,
  40. state_send_server_finished,
  41. state_read_second_client_flight,
  42. state_process_end_of_early_data,
  43. state_read_client_certificate,
  44. state_read_client_certificate_verify,
  45. state_read_channel_id,
  46. state_read_client_finished,
  47. state_send_new_session_ticket,
  48. state_done,
  49. };
  50. static const uint8_t kZeroes[EVP_MAX_MD_SIZE] = {0};
  51. static int resolve_ecdhe_secret(SSL_HANDSHAKE *hs, bool *out_need_retry,
  52. SSL_CLIENT_HELLO *client_hello) {
  53. SSL *const ssl = hs->ssl;
  54. *out_need_retry = false;
  55. // We only support connections that include an ECDHE key exchange.
  56. CBS key_share;
  57. if (!ssl_client_hello_get_extension(client_hello, &key_share,
  58. TLSEXT_TYPE_key_share)) {
  59. OPENSSL_PUT_ERROR(SSL, SSL_R_MISSING_KEY_SHARE);
  60. ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_MISSING_EXTENSION);
  61. return 0;
  62. }
  63. bool found_key_share;
  64. Array<uint8_t> dhe_secret;
  65. uint8_t alert = SSL_AD_DECODE_ERROR;
  66. if (!ssl_ext_key_share_parse_clienthello(hs, &found_key_share, &dhe_secret,
  67. &alert, &key_share)) {
  68. ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
  69. return 0;
  70. }
  71. if (!found_key_share) {
  72. *out_need_retry = true;
  73. return 0;
  74. }
  75. return tls13_advance_key_schedule(hs, dhe_secret.data(), dhe_secret.size());
  76. }
  77. static int ssl_ext_supported_versions_add_serverhello(SSL_HANDSHAKE *hs,
  78. CBB *out) {
  79. CBB contents;
  80. if (!CBB_add_u16(out, TLSEXT_TYPE_supported_versions) ||
  81. !CBB_add_u16_length_prefixed(out, &contents) ||
  82. !CBB_add_u16(&contents, hs->ssl->version) ||
  83. !CBB_flush(out)) {
  84. return 0;
  85. }
  86. return 1;
  87. }
  88. static const SSL_CIPHER *choose_tls13_cipher(
  89. const SSL *ssl, const SSL_CLIENT_HELLO *client_hello) {
  90. if (client_hello->cipher_suites_len % 2 != 0) {
  91. return NULL;
  92. }
  93. CBS cipher_suites;
  94. CBS_init(&cipher_suites, client_hello->cipher_suites,
  95. client_hello->cipher_suites_len);
  96. const int aes_is_fine = EVP_has_aes_hardware();
  97. const uint16_t version = ssl_protocol_version(ssl);
  98. const SSL_CIPHER *best = NULL;
  99. while (CBS_len(&cipher_suites) > 0) {
  100. uint16_t cipher_suite;
  101. if (!CBS_get_u16(&cipher_suites, &cipher_suite)) {
  102. return NULL;
  103. }
  104. // Limit to TLS 1.3 ciphers we know about.
  105. const SSL_CIPHER *candidate = SSL_get_cipher_by_value(cipher_suite);
  106. if (candidate == NULL ||
  107. SSL_CIPHER_get_min_version(candidate) > version ||
  108. SSL_CIPHER_get_max_version(candidate) < version) {
  109. continue;
  110. }
  111. // TLS 1.3 removes legacy ciphers, so honor the client order, but prefer
  112. // ChaCha20 if we do not have AES hardware.
  113. if (aes_is_fine) {
  114. return candidate;
  115. }
  116. if (candidate->algorithm_enc == SSL_CHACHA20POLY1305) {
  117. return candidate;
  118. }
  119. if (best == NULL) {
  120. best = candidate;
  121. }
  122. }
  123. return best;
  124. }
  125. static bool add_new_session_tickets(SSL_HANDSHAKE *hs, bool *out_sent_tickets) {
  126. SSL *const ssl = hs->ssl;
  127. if (// If the client doesn't accept resumption with PSK_DHE_KE, don't send a
  128. // session ticket.
  129. !hs->accept_psk_mode ||
  130. // We only implement stateless resumption in TLS 1.3, so skip sending
  131. // tickets if disabled.
  132. (SSL_get_options(ssl) & SSL_OP_NO_TICKET)) {
  133. *out_sent_tickets = false;
  134. return true;
  135. }
  136. // TLS 1.3 recommends single-use tickets, so issue multiple tickets in case
  137. // the client makes several connections before getting a renewal.
  138. static const int kNumTickets = 2;
  139. // Rebase the session timestamp so that it is measured from ticket
  140. // issuance.
  141. ssl_session_rebase_time(ssl, hs->new_session.get());
  142. for (int i = 0; i < kNumTickets; i++) {
  143. UniquePtr<SSL_SESSION> session(
  144. SSL_SESSION_dup(hs->new_session.get(), SSL_SESSION_INCLUDE_NONAUTH));
  145. if (!session) {
  146. return false;
  147. }
  148. if (!RAND_bytes((uint8_t *)&session->ticket_age_add, 4)) {
  149. return false;
  150. }
  151. session->ticket_age_add_valid = true;
  152. if (ssl->enable_early_data) {
  153. session->ticket_max_early_data = kMaxEarlyDataAccepted;
  154. }
  155. static_assert(kNumTickets < 256, "Too many tickets");
  156. uint8_t nonce[] = {static_cast<uint8_t>(i)};
  157. ScopedCBB cbb;
  158. CBB body, nonce_cbb, ticket, extensions;
  159. if (!ssl->method->init_message(ssl, cbb.get(), &body,
  160. SSL3_MT_NEW_SESSION_TICKET) ||
  161. !CBB_add_u32(&body, session->timeout) ||
  162. !CBB_add_u32(&body, session->ticket_age_add) ||
  163. !CBB_add_u8_length_prefixed(&body, &nonce_cbb) ||
  164. !CBB_add_bytes(&nonce_cbb, nonce, sizeof(nonce)) ||
  165. !CBB_add_u16_length_prefixed(&body, &ticket) ||
  166. !tls13_derive_session_psk(session.get(), nonce,
  167. ssl->ctx->quic_method != nullptr) ||
  168. !ssl_encrypt_ticket(hs, &ticket, session.get()) ||
  169. !CBB_add_u16_length_prefixed(&body, &extensions)) {
  170. return false;
  171. }
  172. if (ssl->enable_early_data) {
  173. CBB early_data_info;
  174. if (!CBB_add_u16(&extensions, TLSEXT_TYPE_early_data) ||
  175. !CBB_add_u16_length_prefixed(&extensions, &early_data_info) ||
  176. !CBB_add_u32(&early_data_info, session->ticket_max_early_data) ||
  177. !CBB_flush(&extensions)) {
  178. return false;
  179. }
  180. }
  181. // Add a fake extension. See draft-davidben-tls-grease-01.
  182. if (!CBB_add_u16(&extensions,
  183. ssl_get_grease_value(hs, ssl_grease_ticket_extension)) ||
  184. !CBB_add_u16(&extensions, 0 /* empty */)) {
  185. return false;
  186. }
  187. if (!ssl_add_message_cbb(ssl, cbb.get())) {
  188. return false;
  189. }
  190. }
  191. *out_sent_tickets = true;
  192. return true;
  193. }
  194. static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs) {
  195. // At this point, most ClientHello extensions have already been processed by
  196. // the common handshake logic. Resolve the remaining non-PSK parameters.
  197. SSL *const ssl = hs->ssl;
  198. SSLMessage msg;
  199. if (!ssl->method->get_message(ssl, &msg)) {
  200. return ssl_hs_read_message;
  201. }
  202. SSL_CLIENT_HELLO client_hello;
  203. if (!ssl_client_hello_init(ssl, &client_hello, msg)) {
  204. OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
  205. ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  206. return ssl_hs_error;
  207. }
  208. OPENSSL_memcpy(hs->session_id, client_hello.session_id,
  209. client_hello.session_id_len);
  210. hs->session_id_len = client_hello.session_id_len;
  211. // Negotiate the cipher suite.
  212. hs->new_cipher = choose_tls13_cipher(ssl, &client_hello);
  213. if (hs->new_cipher == NULL) {
  214. OPENSSL_PUT_ERROR(SSL, SSL_R_NO_SHARED_CIPHER);
  215. ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
  216. return ssl_hs_error;
  217. }
  218. // HTTP/2 negotiation depends on the cipher suite, so ALPN negotiation was
  219. // deferred. Complete it now.
  220. uint8_t alert = SSL_AD_DECODE_ERROR;
  221. if (!ssl_negotiate_alpn(hs, &alert, &client_hello)) {
  222. ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
  223. return ssl_hs_error;
  224. }
  225. // The PRF hash is now known. Set up the key schedule and hash the
  226. // ClientHello.
  227. if (!hs->transcript.InitHash(ssl_protocol_version(ssl), hs->new_cipher)) {
  228. return ssl_hs_error;
  229. }
  230. if (!ssl_hash_message(hs, msg)) {
  231. return ssl_hs_error;
  232. }
  233. hs->tls13_state = state_select_session;
  234. return ssl_hs_ok;
  235. }
  236. static enum ssl_ticket_aead_result_t select_session(
  237. SSL_HANDSHAKE *hs, uint8_t *out_alert, UniquePtr<SSL_SESSION> *out_session,
  238. int32_t *out_ticket_age_skew, const SSLMessage &msg,
  239. const SSL_CLIENT_HELLO *client_hello) {
  240. SSL *const ssl = hs->ssl;
  241. *out_session = NULL;
  242. // Decode the ticket if we agreed on a PSK key exchange mode.
  243. CBS pre_shared_key;
  244. if (!hs->accept_psk_mode ||
  245. !ssl_client_hello_get_extension(client_hello, &pre_shared_key,
  246. TLSEXT_TYPE_pre_shared_key)) {
  247. return ssl_ticket_aead_ignore_ticket;
  248. }
  249. // Verify that the pre_shared_key extension is the last extension in
  250. // ClientHello.
  251. if (CBS_data(&pre_shared_key) + CBS_len(&pre_shared_key) !=
  252. client_hello->extensions + client_hello->extensions_len) {
  253. OPENSSL_PUT_ERROR(SSL, SSL_R_PRE_SHARED_KEY_MUST_BE_LAST);
  254. *out_alert = SSL_AD_ILLEGAL_PARAMETER;
  255. return ssl_ticket_aead_error;
  256. }
  257. CBS ticket, binders;
  258. uint32_t client_ticket_age;
  259. if (!ssl_ext_pre_shared_key_parse_clienthello(hs, &ticket, &binders,
  260. &client_ticket_age, out_alert,
  261. &pre_shared_key)) {
  262. return ssl_ticket_aead_error;
  263. }
  264. // TLS 1.3 session tickets are renewed separately as part of the
  265. // NewSessionTicket.
  266. bool unused_renew;
  267. UniquePtr<SSL_SESSION> session;
  268. enum ssl_ticket_aead_result_t ret =
  269. ssl_process_ticket(hs, &session, &unused_renew, ticket, {});
  270. switch (ret) {
  271. case ssl_ticket_aead_success:
  272. break;
  273. case ssl_ticket_aead_error:
  274. *out_alert = SSL_AD_INTERNAL_ERROR;
  275. return ret;
  276. default:
  277. return ret;
  278. }
  279. if (!ssl_session_is_resumable(hs, session.get()) ||
  280. // Historically, some TLS 1.3 tickets were missing ticket_age_add.
  281. !session->ticket_age_add_valid) {
  282. return ssl_ticket_aead_ignore_ticket;
  283. }
  284. // Recover the client ticket age and convert to seconds.
  285. client_ticket_age -= session->ticket_age_add;
  286. client_ticket_age /= 1000;
  287. struct OPENSSL_timeval now;
  288. ssl_get_current_time(ssl, &now);
  289. // Compute the server ticket age in seconds.
  290. assert(now.tv_sec >= session->time);
  291. uint64_t server_ticket_age = now.tv_sec - session->time;
  292. // To avoid overflowing |hs->ticket_age_skew|, we will not resume
  293. // 68-year-old sessions.
  294. if (server_ticket_age > INT32_MAX) {
  295. return ssl_ticket_aead_ignore_ticket;
  296. }
  297. // TODO(davidben,svaldez): Measure this value to decide on tolerance. For
  298. // now, accept all values. https://crbug.com/boringssl/113.
  299. *out_ticket_age_skew =
  300. (int32_t)client_ticket_age - (int32_t)server_ticket_age;
  301. // Check the PSK binder.
  302. if (!tls13_verify_psk_binder(hs, session.get(), msg, &binders)) {
  303. *out_alert = SSL_AD_DECRYPT_ERROR;
  304. return ssl_ticket_aead_error;
  305. }
  306. *out_session = std::move(session);
  307. return ssl_ticket_aead_success;
  308. }
  309. static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) {
  310. SSL *const ssl = hs->ssl;
  311. SSLMessage msg;
  312. if (!ssl->method->get_message(ssl, &msg)) {
  313. return ssl_hs_read_message;
  314. }
  315. SSL_CLIENT_HELLO client_hello;
  316. if (!ssl_client_hello_init(ssl, &client_hello, msg)) {
  317. OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
  318. ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  319. return ssl_hs_error;
  320. }
  321. uint8_t alert = SSL_AD_DECODE_ERROR;
  322. UniquePtr<SSL_SESSION> session;
  323. switch (select_session(hs, &alert, &session, &ssl->s3->ticket_age_skew, msg,
  324. &client_hello)) {
  325. case ssl_ticket_aead_ignore_ticket:
  326. assert(!session);
  327. if (!ssl_get_new_session(hs, 1 /* server */)) {
  328. ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  329. return ssl_hs_error;
  330. }
  331. break;
  332. case ssl_ticket_aead_success:
  333. // Carry over authentication information from the previous handshake into
  334. // a fresh session.
  335. hs->new_session =
  336. SSL_SESSION_dup(session.get(), SSL_SESSION_DUP_AUTH_ONLY);
  337. if (ssl->enable_early_data &&
  338. // Early data must be acceptable for this ticket.
  339. session->ticket_max_early_data != 0 &&
  340. // The client must have offered early data.
  341. hs->early_data_offered &&
  342. // Channel ID is incompatible with 0-RTT.
  343. !ssl->s3->channel_id_valid &&
  344. // If Token Binding is negotiated, reject 0-RTT.
  345. !ssl->s3->token_binding_negotiated &&
  346. // The negotiated ALPN must match the one in the ticket.
  347. MakeConstSpan(ssl->s3->alpn_selected) == session->early_alpn) {
  348. ssl->s3->early_data_accepted = true;
  349. }
  350. if (hs->new_session == NULL) {
  351. ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  352. return ssl_hs_error;
  353. }
  354. ssl->s3->session_reused = true;
  355. // Resumption incorporates fresh key material, so refresh the timeout.
  356. ssl_session_renew_timeout(ssl, hs->new_session.get(),
  357. ssl->session_ctx->session_psk_dhe_timeout);
  358. break;
  359. case ssl_ticket_aead_error:
  360. ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
  361. return ssl_hs_error;
  362. case ssl_ticket_aead_retry:
  363. hs->tls13_state = state_select_session;
  364. return ssl_hs_pending_ticket;
  365. }
  366. // Record connection properties in the new session.
  367. hs->new_session->cipher = hs->new_cipher;
  368. // Store the initial negotiated ALPN in the session.
  369. if (!hs->new_session->early_alpn.CopyFrom(ssl->s3->alpn_selected)) {
  370. ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  371. return ssl_hs_error;
  372. }
  373. if (ssl->ctx->dos_protection_cb != NULL &&
  374. ssl->ctx->dos_protection_cb(&client_hello) == 0) {
  375. // Connection rejected for DOS reasons.
  376. OPENSSL_PUT_ERROR(SSL, SSL_R_CONNECTION_REJECTED);
  377. ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  378. return ssl_hs_error;
  379. }
  380. size_t hash_len = EVP_MD_size(
  381. ssl_get_handshake_digest(ssl_protocol_version(ssl), hs->new_cipher));
  382. // Set up the key schedule and incorporate the PSK into the running secret.
  383. if (ssl->s3->session_reused) {
  384. if (!tls13_init_key_schedule(hs, hs->new_session->master_key,
  385. hs->new_session->master_key_length)) {
  386. return ssl_hs_error;
  387. }
  388. } else if (!tls13_init_key_schedule(hs, kZeroes, hash_len)) {
  389. return ssl_hs_error;
  390. }
  391. if (ssl->s3->early_data_accepted) {
  392. if (!tls13_derive_early_secrets(hs)) {
  393. return ssl_hs_error;
  394. }
  395. } else if (hs->early_data_offered) {
  396. ssl->s3->skip_early_data = true;
  397. }
  398. // Resolve ECDHE and incorporate it into the secret.
  399. bool need_retry;
  400. if (!resolve_ecdhe_secret(hs, &need_retry, &client_hello)) {
  401. if (need_retry) {
  402. ssl->s3->early_data_accepted = false;
  403. ssl->s3->skip_early_data = true;
  404. ssl->method->next_message(ssl);
  405. if (!hs->transcript.UpdateForHelloRetryRequest()) {
  406. return ssl_hs_error;
  407. }
  408. hs->tls13_state = state_send_hello_retry_request;
  409. return ssl_hs_ok;
  410. }
  411. return ssl_hs_error;
  412. }
  413. ssl->method->next_message(ssl);
  414. hs->tls13_state = state_send_server_hello;
  415. return ssl_hs_ok;
  416. }
  417. static enum ssl_hs_wait_t do_send_hello_retry_request(SSL_HANDSHAKE *hs) {
  418. SSL *const ssl = hs->ssl;
  419. ScopedCBB cbb;
  420. CBB body, session_id, extensions;
  421. uint16_t group_id;
  422. if (!ssl->method->init_message(ssl, cbb.get(), &body, SSL3_MT_SERVER_HELLO) ||
  423. !CBB_add_u16(&body, TLS1_2_VERSION) ||
  424. !CBB_add_bytes(&body, kHelloRetryRequest, SSL3_RANDOM_SIZE) ||
  425. !CBB_add_u8_length_prefixed(&body, &session_id) ||
  426. !CBB_add_bytes(&session_id, hs->session_id, hs->session_id_len) ||
  427. !CBB_add_u16(&body, ssl_cipher_get_value(hs->new_cipher)) ||
  428. !CBB_add_u8(&body, 0 /* no compression */) ||
  429. !tls1_get_shared_group(hs, &group_id) ||
  430. !CBB_add_u16_length_prefixed(&body, &extensions) ||
  431. !CBB_add_u16(&extensions, TLSEXT_TYPE_supported_versions) ||
  432. !CBB_add_u16(&extensions, 2 /* length */) ||
  433. !CBB_add_u16(&extensions, ssl->version) ||
  434. !CBB_add_u16(&extensions, TLSEXT_TYPE_key_share) ||
  435. !CBB_add_u16(&extensions, 2 /* length */) ||
  436. !CBB_add_u16(&extensions, group_id) ||
  437. !ssl_add_message_cbb(ssl, cbb.get())) {
  438. return ssl_hs_error;
  439. }
  440. if (!ssl->method->add_change_cipher_spec(ssl)) {
  441. return ssl_hs_error;
  442. }
  443. hs->sent_hello_retry_request = true;
  444. hs->tls13_state = state_read_second_client_hello;
  445. return ssl_hs_flush;
  446. }
  447. static enum ssl_hs_wait_t do_read_second_client_hello(SSL_HANDSHAKE *hs) {
  448. SSL *const ssl = hs->ssl;
  449. SSLMessage msg;
  450. if (!ssl->method->get_message(ssl, &msg)) {
  451. return ssl_hs_read_message;
  452. }
  453. if (!ssl_check_message_type(ssl, msg, SSL3_MT_CLIENT_HELLO)) {
  454. return ssl_hs_error;
  455. }
  456. SSL_CLIENT_HELLO client_hello;
  457. if (!ssl_client_hello_init(ssl, &client_hello, msg)) {
  458. OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
  459. ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  460. return ssl_hs_error;
  461. }
  462. bool need_retry;
  463. if (!resolve_ecdhe_secret(hs, &need_retry, &client_hello)) {
  464. if (need_retry) {
  465. // Only send one HelloRetryRequest.
  466. ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
  467. OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CURVE);
  468. }
  469. return ssl_hs_error;
  470. }
  471. if (!ssl_hash_message(hs, msg)) {
  472. return ssl_hs_error;
  473. }
  474. ssl->method->next_message(ssl);
  475. hs->tls13_state = state_send_server_hello;
  476. return ssl_hs_ok;
  477. }
  478. static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) {
  479. SSL *const ssl = hs->ssl;
  480. // Send a ServerHello.
  481. ScopedCBB cbb;
  482. CBB body, extensions, session_id;
  483. if (!ssl->method->init_message(ssl, cbb.get(), &body, SSL3_MT_SERVER_HELLO) ||
  484. !CBB_add_u16(&body, TLS1_2_VERSION) ||
  485. !RAND_bytes(ssl->s3->server_random, sizeof(ssl->s3->server_random)) ||
  486. !CBB_add_bytes(&body, ssl->s3->server_random, SSL3_RANDOM_SIZE) ||
  487. !CBB_add_u8_length_prefixed(&body, &session_id) ||
  488. !CBB_add_bytes(&session_id, hs->session_id, hs->session_id_len) ||
  489. !CBB_add_u16(&body, ssl_cipher_get_value(hs->new_cipher)) ||
  490. !CBB_add_u8(&body, 0) ||
  491. !CBB_add_u16_length_prefixed(&body, &extensions) ||
  492. !ssl_ext_pre_shared_key_add_serverhello(hs, &extensions) ||
  493. !ssl_ext_key_share_add_serverhello(hs, &extensions) ||
  494. !ssl_ext_supported_versions_add_serverhello(hs, &extensions) ||
  495. !ssl_add_message_cbb(ssl, cbb.get())) {
  496. return ssl_hs_error;
  497. }
  498. if (!hs->sent_hello_retry_request &&
  499. !ssl->method->add_change_cipher_spec(ssl)) {
  500. return ssl_hs_error;
  501. }
  502. // Derive and enable the handshake traffic secrets.
  503. if (!tls13_derive_handshake_secrets(hs) ||
  504. !tls13_set_traffic_key(ssl, ssl_encryption_handshake, evp_aead_seal,
  505. hs->server_handshake_secret, hs->hash_len)) {
  506. return ssl_hs_error;
  507. }
  508. // Send EncryptedExtensions.
  509. if (!ssl->method->init_message(ssl, cbb.get(), &body,
  510. SSL3_MT_ENCRYPTED_EXTENSIONS) ||
  511. !ssl_add_serverhello_tlsext(hs, &body) ||
  512. !ssl_add_message_cbb(ssl, cbb.get())) {
  513. return ssl_hs_error;
  514. }
  515. if (!ssl->s3->session_reused) {
  516. // Determine whether to request a client certificate.
  517. hs->cert_request = !!(hs->config->verify_mode & SSL_VERIFY_PEER);
  518. // Only request a certificate if Channel ID isn't negotiated.
  519. if ((hs->config->verify_mode & SSL_VERIFY_PEER_IF_NO_OBC) &&
  520. ssl->s3->channel_id_valid) {
  521. hs->cert_request = false;
  522. }
  523. }
  524. // Send a CertificateRequest, if necessary.
  525. if (hs->cert_request) {
  526. CBB cert_request_extensions, sigalg_contents, sigalgs_cbb;
  527. if (!ssl->method->init_message(ssl, cbb.get(), &body,
  528. SSL3_MT_CERTIFICATE_REQUEST) ||
  529. !CBB_add_u8(&body, 0 /* no certificate_request_context. */) ||
  530. !CBB_add_u16_length_prefixed(&body, &cert_request_extensions) ||
  531. !CBB_add_u16(&cert_request_extensions,
  532. TLSEXT_TYPE_signature_algorithms) ||
  533. !CBB_add_u16_length_prefixed(&cert_request_extensions,
  534. &sigalg_contents) ||
  535. !CBB_add_u16_length_prefixed(&sigalg_contents, &sigalgs_cbb) ||
  536. !tls12_add_verify_sigalgs(ssl, &sigalgs_cbb,
  537. false /* online signature */)) {
  538. return ssl_hs_error;
  539. }
  540. if (tls12_has_different_verify_sigalgs_for_certs(ssl)) {
  541. if (!CBB_add_u16(&cert_request_extensions,
  542. TLSEXT_TYPE_signature_algorithms_cert) ||
  543. !CBB_add_u16_length_prefixed(&cert_request_extensions,
  544. &sigalg_contents) ||
  545. !CBB_add_u16_length_prefixed(&sigalg_contents, &sigalgs_cbb) ||
  546. !tls12_add_verify_sigalgs(ssl, &sigalgs_cbb, true /* certs */)) {
  547. return ssl_hs_error;
  548. }
  549. }
  550. if (ssl_has_client_CAs(hs->config)) {
  551. CBB ca_contents;
  552. if (!CBB_add_u16(&cert_request_extensions,
  553. TLSEXT_TYPE_certificate_authorities) ||
  554. !CBB_add_u16_length_prefixed(&cert_request_extensions,
  555. &ca_contents) ||
  556. !ssl_add_client_CA_list(hs, &ca_contents) ||
  557. !CBB_flush(&cert_request_extensions)) {
  558. return ssl_hs_error;
  559. }
  560. }
  561. if (!ssl_add_message_cbb(ssl, cbb.get())) {
  562. return ssl_hs_error;
  563. }
  564. }
  565. // Send the server Certificate message, if necessary.
  566. if (!ssl->s3->session_reused) {
  567. if (!ssl_has_certificate(hs->config)) {
  568. OPENSSL_PUT_ERROR(SSL, SSL_R_NO_CERTIFICATE_SET);
  569. return ssl_hs_error;
  570. }
  571. if (!tls13_add_certificate(hs)) {
  572. return ssl_hs_error;
  573. }
  574. hs->tls13_state = state_send_server_certificate_verify;
  575. return ssl_hs_ok;
  576. }
  577. hs->tls13_state = state_send_server_finished;
  578. return ssl_hs_ok;
  579. }
  580. static enum ssl_hs_wait_t do_send_server_certificate_verify(SSL_HANDSHAKE *hs) {
  581. switch (tls13_add_certificate_verify(hs)) {
  582. case ssl_private_key_success:
  583. hs->tls13_state = state_send_server_finished;
  584. return ssl_hs_ok;
  585. case ssl_private_key_retry:
  586. hs->tls13_state = state_send_server_certificate_verify;
  587. return ssl_hs_private_key_operation;
  588. case ssl_private_key_failure:
  589. return ssl_hs_error;
  590. }
  591. assert(0);
  592. return ssl_hs_error;
  593. }
  594. static enum ssl_hs_wait_t do_send_server_finished(SSL_HANDSHAKE *hs) {
  595. SSL *const ssl = hs->ssl;
  596. if (!tls13_add_finished(hs) ||
  597. // Update the secret to the master secret and derive traffic keys.
  598. !tls13_advance_key_schedule(hs, kZeroes, hs->hash_len) ||
  599. !tls13_derive_application_secrets(hs) ||
  600. !tls13_set_traffic_key(ssl, ssl_encryption_application, evp_aead_seal,
  601. hs->server_traffic_secret_0, hs->hash_len)) {
  602. return ssl_hs_error;
  603. }
  604. if (ssl->s3->early_data_accepted) {
  605. // If accepting 0-RTT, we send tickets half-RTT. This gets the tickets on
  606. // the wire sooner and also avoids triggering a write on |SSL_read| when
  607. // processing the client Finished. This requires computing the client
  608. // Finished early. See RFC 8446, section 4.6.1.
  609. static const uint8_t kEndOfEarlyData[4] = {SSL3_MT_END_OF_EARLY_DATA, 0,
  610. 0, 0};
  611. if (!hs->transcript.Update(kEndOfEarlyData)) {
  612. OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
  613. return ssl_hs_error;
  614. }
  615. size_t finished_len;
  616. if (!tls13_finished_mac(hs, hs->expected_client_finished, &finished_len,
  617. false /* client */)) {
  618. return ssl_hs_error;
  619. }
  620. if (finished_len != hs->hash_len) {
  621. OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
  622. return ssl_hs_error;
  623. }
  624. // Feed the predicted Finished into the transcript. This allows us to derive
  625. // the resumption secret early and send half-RTT tickets.
  626. //
  627. // TODO(davidben): This will need to be updated for DTLS 1.3.
  628. assert(!SSL_is_dtls(hs->ssl));
  629. assert(hs->hash_len <= 0xff);
  630. uint8_t header[4] = {SSL3_MT_FINISHED, 0, 0,
  631. static_cast<uint8_t>(hs->hash_len)};
  632. bool unused_sent_tickets;
  633. if (!hs->transcript.Update(header) ||
  634. !hs->transcript.Update(
  635. MakeConstSpan(hs->expected_client_finished, hs->hash_len)) ||
  636. !tls13_derive_resumption_secret(hs) ||
  637. !add_new_session_tickets(hs, &unused_sent_tickets)) {
  638. return ssl_hs_error;
  639. }
  640. }
  641. hs->tls13_state = state_read_second_client_flight;
  642. return ssl_hs_flush;
  643. }
  644. static enum ssl_hs_wait_t do_read_second_client_flight(SSL_HANDSHAKE *hs) {
  645. SSL *const ssl = hs->ssl;
  646. if (ssl->s3->early_data_accepted) {
  647. if (!tls13_set_traffic_key(ssl, ssl_encryption_early_data, evp_aead_open,
  648. hs->early_traffic_secret, hs->hash_len)) {
  649. return ssl_hs_error;
  650. }
  651. hs->can_early_write = true;
  652. hs->can_early_read = true;
  653. hs->in_early_data = true;
  654. }
  655. hs->tls13_state = state_process_end_of_early_data;
  656. return ssl->s3->early_data_accepted ? ssl_hs_read_end_of_early_data
  657. : ssl_hs_ok;
  658. }
  659. static enum ssl_hs_wait_t do_process_end_of_early_data(SSL_HANDSHAKE *hs) {
  660. SSL *const ssl = hs->ssl;
  661. if (hs->early_data_offered) {
  662. // If early data was not accepted, the EndOfEarlyData and ChangeCipherSpec
  663. // message will be in the discarded early data.
  664. if (hs->ssl->s3->early_data_accepted) {
  665. SSLMessage msg;
  666. if (!ssl->method->get_message(ssl, &msg)) {
  667. return ssl_hs_read_message;
  668. }
  669. if (!ssl_check_message_type(ssl, msg, SSL3_MT_END_OF_EARLY_DATA)) {
  670. return ssl_hs_error;
  671. }
  672. if (CBS_len(&msg.body) != 0) {
  673. ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  674. OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
  675. return ssl_hs_error;
  676. }
  677. ssl->method->next_message(ssl);
  678. }
  679. }
  680. if (!tls13_set_traffic_key(ssl, ssl_encryption_handshake, evp_aead_open,
  681. hs->client_handshake_secret, hs->hash_len)) {
  682. return ssl_hs_error;
  683. }
  684. hs->tls13_state = ssl->s3->early_data_accepted
  685. ? state_read_client_finished
  686. : state_read_client_certificate;
  687. return ssl_hs_ok;
  688. }
  689. static enum ssl_hs_wait_t do_read_client_certificate(SSL_HANDSHAKE *hs) {
  690. SSL *const ssl = hs->ssl;
  691. if (!hs->cert_request) {
  692. // OpenSSL returns X509_V_OK when no certificates are requested. This is
  693. // classed by them as a bug, but it's assumed by at least NGINX.
  694. hs->new_session->verify_result = X509_V_OK;
  695. // Skip this state.
  696. hs->tls13_state = state_read_channel_id;
  697. return ssl_hs_ok;
  698. }
  699. const bool allow_anonymous =
  700. (hs->config->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT) == 0;
  701. SSLMessage msg;
  702. if (!ssl->method->get_message(ssl, &msg)) {
  703. return ssl_hs_read_message;
  704. }
  705. if (!ssl_check_message_type(ssl, msg, SSL3_MT_CERTIFICATE) ||
  706. !tls13_process_certificate(hs, msg, allow_anonymous) ||
  707. !ssl_hash_message(hs, msg)) {
  708. return ssl_hs_error;
  709. }
  710. ssl->method->next_message(ssl);
  711. hs->tls13_state = state_read_client_certificate_verify;
  712. return ssl_hs_ok;
  713. }
  714. static enum ssl_hs_wait_t do_read_client_certificate_verify(
  715. SSL_HANDSHAKE *hs) {
  716. SSL *const ssl = hs->ssl;
  717. if (sk_CRYPTO_BUFFER_num(hs->new_session->certs.get()) == 0) {
  718. // Skip this state.
  719. hs->tls13_state = state_read_channel_id;
  720. return ssl_hs_ok;
  721. }
  722. SSLMessage msg;
  723. if (!ssl->method->get_message(ssl, &msg)) {
  724. return ssl_hs_read_message;
  725. }
  726. switch (ssl_verify_peer_cert(hs)) {
  727. case ssl_verify_ok:
  728. break;
  729. case ssl_verify_invalid:
  730. return ssl_hs_error;
  731. case ssl_verify_retry:
  732. hs->tls13_state = state_read_client_certificate_verify;
  733. return ssl_hs_certificate_verify;
  734. }
  735. if (!ssl_check_message_type(ssl, msg, SSL3_MT_CERTIFICATE_VERIFY) ||
  736. !tls13_process_certificate_verify(hs, msg) ||
  737. !ssl_hash_message(hs, msg)) {
  738. return ssl_hs_error;
  739. }
  740. ssl->method->next_message(ssl);
  741. hs->tls13_state = state_read_channel_id;
  742. return ssl_hs_ok;
  743. }
  744. static enum ssl_hs_wait_t do_read_channel_id(SSL_HANDSHAKE *hs) {
  745. SSL *const ssl = hs->ssl;
  746. if (!ssl->s3->channel_id_valid) {
  747. hs->tls13_state = state_read_client_finished;
  748. return ssl_hs_ok;
  749. }
  750. SSLMessage msg;
  751. if (!ssl->method->get_message(ssl, &msg)) {
  752. return ssl_hs_read_message;
  753. }
  754. if (!ssl_check_message_type(ssl, msg, SSL3_MT_CHANNEL_ID) ||
  755. !tls1_verify_channel_id(hs, msg) ||
  756. !ssl_hash_message(hs, msg)) {
  757. return ssl_hs_error;
  758. }
  759. ssl->method->next_message(ssl);
  760. hs->tls13_state = state_read_client_finished;
  761. return ssl_hs_ok;
  762. }
  763. static enum ssl_hs_wait_t do_read_client_finished(SSL_HANDSHAKE *hs) {
  764. SSL *const ssl = hs->ssl;
  765. SSLMessage msg;
  766. if (!ssl->method->get_message(ssl, &msg)) {
  767. return ssl_hs_read_message;
  768. }
  769. if (!ssl_check_message_type(ssl, msg, SSL3_MT_FINISHED) ||
  770. // If early data was accepted, we've already computed the client Finished
  771. // and derived the resumption secret.
  772. !tls13_process_finished(hs, msg, ssl->s3->early_data_accepted) ||
  773. // evp_aead_seal keys have already been switched.
  774. !tls13_set_traffic_key(ssl, ssl_encryption_application, evp_aead_open,
  775. hs->client_traffic_secret_0, hs->hash_len)) {
  776. return ssl_hs_error;
  777. }
  778. if (!ssl->s3->early_data_accepted) {
  779. if (!ssl_hash_message(hs, msg) ||
  780. !tls13_derive_resumption_secret(hs)) {
  781. return ssl_hs_error;
  782. }
  783. // We send post-handshake tickets as part of the handshake in 1-RTT.
  784. hs->tls13_state = state_send_new_session_ticket;
  785. } else {
  786. // We already sent half-RTT tickets.
  787. hs->tls13_state = state_done;
  788. }
  789. ssl->method->next_message(ssl);
  790. return ssl_hs_ok;
  791. }
  792. static enum ssl_hs_wait_t do_send_new_session_ticket(SSL_HANDSHAKE *hs) {
  793. bool sent_tickets;
  794. if (!add_new_session_tickets(hs, &sent_tickets)) {
  795. return ssl_hs_error;
  796. }
  797. hs->tls13_state = state_done;
  798. return sent_tickets ? ssl_hs_flush : ssl_hs_ok;
  799. }
  800. enum ssl_hs_wait_t tls13_server_handshake(SSL_HANDSHAKE *hs) {
  801. while (hs->tls13_state != state_done) {
  802. enum ssl_hs_wait_t ret = ssl_hs_error;
  803. enum server_hs_state_t state =
  804. static_cast<enum server_hs_state_t>(hs->tls13_state);
  805. switch (state) {
  806. case state_select_parameters:
  807. ret = do_select_parameters(hs);
  808. break;
  809. case state_select_session:
  810. ret = do_select_session(hs);
  811. break;
  812. case state_send_hello_retry_request:
  813. ret = do_send_hello_retry_request(hs);
  814. break;
  815. case state_read_second_client_hello:
  816. ret = do_read_second_client_hello(hs);
  817. break;
  818. case state_send_server_hello:
  819. ret = do_send_server_hello(hs);
  820. break;
  821. case state_send_server_certificate_verify:
  822. ret = do_send_server_certificate_verify(hs);
  823. break;
  824. case state_send_server_finished:
  825. ret = do_send_server_finished(hs);
  826. break;
  827. case state_read_second_client_flight:
  828. ret = do_read_second_client_flight(hs);
  829. break;
  830. case state_process_end_of_early_data:
  831. ret = do_process_end_of_early_data(hs);
  832. break;
  833. case state_read_client_certificate:
  834. ret = do_read_client_certificate(hs);
  835. break;
  836. case state_read_client_certificate_verify:
  837. ret = do_read_client_certificate_verify(hs);
  838. break;
  839. case state_read_channel_id:
  840. ret = do_read_channel_id(hs);
  841. break;
  842. case state_read_client_finished:
  843. ret = do_read_client_finished(hs);
  844. break;
  845. case state_send_new_session_ticket:
  846. ret = do_send_new_session_ticket(hs);
  847. break;
  848. case state_done:
  849. ret = ssl_hs_ok;
  850. break;
  851. }
  852. if (hs->tls13_state != state) {
  853. ssl_do_info_callback(hs->ssl, SSL_CB_ACCEPT_LOOP, 1);
  854. }
  855. if (ret != ssl_hs_ok) {
  856. return ret;
  857. }
  858. }
  859. return ssl_hs_ok;
  860. }
  861. const char *tls13_server_handshake_state(SSL_HANDSHAKE *hs) {
  862. enum server_hs_state_t state =
  863. static_cast<enum server_hs_state_t>(hs->tls13_state);
  864. switch (state) {
  865. case state_select_parameters:
  866. return "TLS 1.3 server select_parameters";
  867. case state_select_session:
  868. return "TLS 1.3 server select_session";
  869. case state_send_hello_retry_request:
  870. return "TLS 1.3 server send_hello_retry_request";
  871. case state_read_second_client_hello:
  872. return "TLS 1.3 server read_second_client_hello";
  873. case state_send_server_hello:
  874. return "TLS 1.3 server send_server_hello";
  875. case state_send_server_certificate_verify:
  876. return "TLS 1.3 server send_server_certificate_verify";
  877. case state_send_server_finished:
  878. return "TLS 1.3 server send_server_finished";
  879. case state_read_second_client_flight:
  880. return "TLS 1.3 server read_second_client_flight";
  881. case state_process_end_of_early_data:
  882. return "TLS 1.3 server process_end_of_early_data";
  883. case state_read_client_certificate:
  884. return "TLS 1.3 server read_client_certificate";
  885. case state_read_client_certificate_verify:
  886. return "TLS 1.3 server read_client_certificate_verify";
  887. case state_read_channel_id:
  888. return "TLS 1.3 server read_channel_id";
  889. case state_read_client_finished:
  890. return "TLS 1.3 server read_client_finished";
  891. case state_send_new_session_ticket:
  892. return "TLS 1.3 server send_new_session_ticket";
  893. case state_done:
  894. return "TLS 1.3 server done";
  895. }
  896. return "TLS 1.3 server unknown";
  897. }
  898. BSSL_NAMESPACE_END