25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

tls13_server.c 22 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672
  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. #include <openssl/ssl.h>
  15. #include <assert.h>
  16. #include <string.h>
  17. #include <openssl/bytestring.h>
  18. #include <openssl/digest.h>
  19. #include <openssl/err.h>
  20. #include <openssl/mem.h>
  21. #include <openssl/rand.h>
  22. #include <openssl/stack.h>
  23. #include "internal.h"
  24. enum server_hs_state_t {
  25. state_process_client_hello = 0,
  26. state_select_parameters,
  27. state_send_hello_retry_request,
  28. state_flush_hello_retry_request,
  29. state_process_second_client_hello,
  30. state_send_server_hello,
  31. state_send_encrypted_extensions,
  32. state_send_certificate_request,
  33. state_send_server_certificate,
  34. state_send_server_certificate_verify,
  35. state_complete_server_certificate_verify,
  36. state_send_server_finished,
  37. state_flush,
  38. state_process_client_certificate,
  39. state_process_client_certificate_verify,
  40. state_process_client_finished,
  41. state_send_new_session_ticket,
  42. state_flush_new_session_ticket,
  43. state_done,
  44. };
  45. static const uint8_t kZeroes[EVP_MAX_MD_SIZE] = {0};
  46. static int resolve_psk_secret(SSL *ssl) {
  47. SSL_HANDSHAKE *hs = ssl->s3->hs;
  48. if (ssl->s3->tmp.new_cipher->algorithm_auth != SSL_aPSK) {
  49. return tls13_advance_key_schedule(ssl, kZeroes, hs->hash_len);
  50. }
  51. uint8_t resumption_psk[EVP_MAX_MD_SIZE];
  52. if (!tls13_resumption_psk(ssl, resumption_psk, hs->hash_len,
  53. ssl->s3->new_session) ||
  54. !tls13_advance_key_schedule(ssl, resumption_psk, hs->hash_len)) {
  55. return 0;
  56. }
  57. return 1;
  58. }
  59. static int resolve_ecdhe_secret(SSL *ssl, int *out_need_retry,
  60. struct ssl_early_callback_ctx *early_ctx) {
  61. *out_need_retry = 0;
  62. SSL_HANDSHAKE *hs = ssl->s3->hs;
  63. if (ssl->s3->tmp.new_cipher->algorithm_mkey != SSL_kECDHE) {
  64. return tls13_advance_key_schedule(ssl, kZeroes, hs->hash_len);
  65. }
  66. CBS key_share;
  67. if (!ssl_early_callback_get_extension(early_ctx, &key_share,
  68. TLSEXT_TYPE_key_share)) {
  69. OPENSSL_PUT_ERROR(SSL, SSL_R_MISSING_KEY_SHARE);
  70. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_MISSING_EXTENSION);
  71. return ssl_hs_error;
  72. }
  73. int found_key_share;
  74. uint8_t *dhe_secret;
  75. size_t dhe_secret_len;
  76. uint8_t alert;
  77. if (!ssl_ext_key_share_parse_clienthello(ssl, &found_key_share, &dhe_secret,
  78. &dhe_secret_len, &alert,
  79. &key_share)) {
  80. ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
  81. return 0;
  82. }
  83. if (!found_key_share) {
  84. *out_need_retry = 1;
  85. return 0;
  86. }
  87. int ok = tls13_advance_key_schedule(ssl, dhe_secret, dhe_secret_len);
  88. OPENSSL_free(dhe_secret);
  89. return ok;
  90. }
  91. static enum ssl_hs_wait_t do_process_client_hello(SSL *ssl, SSL_HANDSHAKE *hs) {
  92. if (!tls13_check_message_type(ssl, SSL3_MT_CLIENT_HELLO)) {
  93. return ssl_hs_error;
  94. }
  95. struct ssl_early_callback_ctx client_hello;
  96. if (!ssl_early_callback_init(ssl, &client_hello, ssl->init_msg,
  97. ssl->init_num)) {
  98. OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
  99. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  100. return ssl_hs_error;
  101. }
  102. assert(ssl->s3->have_version);
  103. /* Load the client random. */
  104. if (client_hello.random_len != SSL3_RANDOM_SIZE) {
  105. OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
  106. return -1;
  107. }
  108. memcpy(ssl->s3->client_random, client_hello.random, client_hello.random_len);
  109. uint8_t alert = SSL_AD_DECODE_ERROR;
  110. SSL_SESSION *session = NULL;
  111. CBS pre_shared_key;
  112. if (ssl_early_callback_get_extension(&client_hello, &pre_shared_key,
  113. TLSEXT_TYPE_pre_shared_key) &&
  114. !ssl_ext_pre_shared_key_parse_clienthello(ssl, &session, &alert,
  115. &pre_shared_key)) {
  116. ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
  117. return 0;
  118. }
  119. uint16_t resumption_cipher;
  120. if (session != NULL &&
  121. /* We currently only support ECDHE-PSK resumption. */
  122. ((session->ticket_flags & SSL_TICKET_ALLOW_DHE_RESUMPTION) == 0 ||
  123. /* Only resume if the session's version matches. */
  124. session->ssl_version != ssl->version ||
  125. !ssl_cipher_get_ecdhe_psk_cipher(session->cipher, &resumption_cipher) ||
  126. !ssl_client_cipher_list_contains_cipher(&client_hello,
  127. resumption_cipher))) {
  128. SSL_SESSION_free(session);
  129. session = NULL;
  130. }
  131. if (session == NULL) {
  132. if (!ssl_get_new_session(ssl, 1 /* server */)) {
  133. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  134. return ssl_hs_error;
  135. }
  136. } else {
  137. /* Only authentication information carries over in TLS 1.3. */
  138. ssl->s3->new_session = SSL_SESSION_dup(session, SSL_SESSION_DUP_AUTH_ONLY);
  139. if (ssl->s3->new_session == NULL) {
  140. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  141. return ssl_hs_error;
  142. }
  143. ssl->s3->session_reused = 1;
  144. SSL_SESSION_free(session);
  145. }
  146. if (ssl->ctx->dos_protection_cb != NULL &&
  147. ssl->ctx->dos_protection_cb(&client_hello) == 0) {
  148. /* Connection rejected for DOS reasons. */
  149. OPENSSL_PUT_ERROR(SSL, SSL_R_CONNECTION_REJECTED);
  150. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ACCESS_DENIED);
  151. return ssl_hs_error;
  152. }
  153. /* TLS 1.3 requires the peer only advertise the null compression. */
  154. if (client_hello.compression_methods_len != 1 ||
  155. client_hello.compression_methods[0] != 0) {
  156. OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_COMPRESSION_LIST);
  157. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
  158. return ssl_hs_error;
  159. }
  160. /* TLS extensions. */
  161. if (!ssl_parse_clienthello_tlsext(ssl, &client_hello)) {
  162. OPENSSL_PUT_ERROR(SSL, SSL_R_PARSE_TLSEXT);
  163. return ssl_hs_error;
  164. }
  165. hs->state = state_select_parameters;
  166. return ssl_hs_ok;
  167. }
  168. static enum ssl_hs_wait_t do_select_parameters(SSL *ssl, SSL_HANDSHAKE *hs) {
  169. if (!ssl->s3->session_reused) {
  170. /* Call |cert_cb| to update server certificates if required. */
  171. if (ssl->cert->cert_cb != NULL) {
  172. int rv = ssl->cert->cert_cb(ssl, ssl->cert->cert_cb_arg);
  173. if (rv == 0) {
  174. OPENSSL_PUT_ERROR(SSL, SSL_R_CERT_CB_ERROR);
  175. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
  176. return ssl_hs_error;
  177. }
  178. if (rv < 0) {
  179. hs->state = state_select_parameters;
  180. return ssl_hs_x509_lookup;
  181. }
  182. }
  183. }
  184. struct ssl_early_callback_ctx client_hello;
  185. if (!ssl_early_callback_init(ssl, &client_hello, ssl->init_msg,
  186. ssl->init_num)) {
  187. OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
  188. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  189. return ssl_hs_error;
  190. }
  191. if (!ssl->s3->session_reused) {
  192. const SSL_CIPHER *cipher =
  193. ssl3_choose_cipher(ssl, &client_hello, ssl_get_cipher_preferences(ssl));
  194. if (cipher == NULL) {
  195. OPENSSL_PUT_ERROR(SSL, SSL_R_NO_SHARED_CIPHER);
  196. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
  197. return ssl_hs_error;
  198. }
  199. ssl->s3->new_session->cipher = cipher;
  200. ssl->s3->tmp.new_cipher = cipher;
  201. } else {
  202. uint16_t resumption_cipher;
  203. if (!ssl_cipher_get_ecdhe_psk_cipher(ssl->s3->new_session->cipher,
  204. &resumption_cipher)) {
  205. OPENSSL_PUT_ERROR(SSL, SSL_R_NO_SHARED_CIPHER);
  206. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
  207. return ssl_hs_error;
  208. }
  209. ssl->s3->tmp.new_cipher = SSL_get_cipher_by_value(resumption_cipher);
  210. }
  211. ssl->method->received_flight(ssl);
  212. /* The PRF hash is now known. Set up the key schedule and hash the
  213. * ClientHello. */
  214. size_t resumption_ctx_len =
  215. EVP_MD_size(ssl_get_handshake_digest(ssl_get_algorithm_prf(ssl)));
  216. if (ssl->s3->session_reused) {
  217. uint8_t resumption_ctx[EVP_MAX_MD_SIZE];
  218. if (!tls13_resumption_context(ssl, resumption_ctx, resumption_ctx_len,
  219. ssl->s3->new_session) ||
  220. !tls13_init_key_schedule(ssl, resumption_ctx, resumption_ctx_len)) {
  221. return ssl_hs_error;
  222. }
  223. } else {
  224. if (!tls13_init_key_schedule(ssl, kZeroes, resumption_ctx_len)) {
  225. return ssl_hs_error;
  226. }
  227. }
  228. /* Resolve PSK and incorporate it into the secret. */
  229. if (!resolve_psk_secret(ssl)) {
  230. return ssl_hs_error;
  231. }
  232. /* Resolve ECDHE and incorporate it into the secret. */
  233. int need_retry;
  234. if (!resolve_ecdhe_secret(ssl, &need_retry, &client_hello)) {
  235. if (need_retry) {
  236. hs->state = state_send_hello_retry_request;
  237. return ssl_hs_ok;
  238. }
  239. return ssl_hs_error;
  240. }
  241. hs->state = state_send_server_hello;
  242. return ssl_hs_ok;
  243. }
  244. static enum ssl_hs_wait_t do_send_hello_retry_request(SSL *ssl,
  245. SSL_HANDSHAKE *hs) {
  246. CBB cbb, body, extensions;
  247. uint16_t group_id;
  248. if (!ssl->method->init_message(ssl, &cbb, &body,
  249. SSL3_MT_HELLO_RETRY_REQUEST) ||
  250. !CBB_add_u16(&body, ssl->version) ||
  251. !CBB_add_u16(&body, ssl_cipher_get_value(ssl->s3->tmp.new_cipher)) ||
  252. !tls1_get_shared_group(ssl, &group_id) ||
  253. !CBB_add_u16(&body, group_id) ||
  254. !CBB_add_u16_length_prefixed(&body, &extensions) ||
  255. !ssl->method->finish_message(ssl, &cbb)) {
  256. CBB_cleanup(&cbb);
  257. return ssl_hs_error;
  258. }
  259. hs->state = state_flush_hello_retry_request;
  260. return ssl_hs_write_message;
  261. }
  262. static enum ssl_hs_wait_t do_flush_hello_retry_request(SSL *ssl,
  263. SSL_HANDSHAKE *hs) {
  264. hs->state = state_process_second_client_hello;
  265. return ssl_hs_flush_and_read_message;
  266. }
  267. static enum ssl_hs_wait_t do_process_second_client_hello(SSL *ssl,
  268. SSL_HANDSHAKE *hs) {
  269. if (!tls13_check_message_type(ssl, SSL3_MT_CLIENT_HELLO)) {
  270. return ssl_hs_error;
  271. }
  272. struct ssl_early_callback_ctx client_hello;
  273. if (!ssl_early_callback_init(ssl, &client_hello, ssl->init_msg,
  274. ssl->init_num)) {
  275. OPENSSL_PUT_ERROR(SSL, SSL_R_CLIENTHELLO_PARSE_FAILED);
  276. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
  277. return ssl_hs_error;
  278. }
  279. int need_retry;
  280. if (!resolve_ecdhe_secret(ssl, &need_retry, &client_hello)) {
  281. if (need_retry) {
  282. /* Only send one HelloRetryRequest. */
  283. ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
  284. OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_CURVE);
  285. }
  286. return ssl_hs_error;
  287. }
  288. if (!ssl->method->hash_current_message(ssl)) {
  289. return ssl_hs_error;
  290. }
  291. ssl->method->received_flight(ssl);
  292. hs->state = state_send_server_hello;
  293. return ssl_hs_ok;
  294. }
  295. static enum ssl_hs_wait_t do_send_server_hello(SSL *ssl, SSL_HANDSHAKE *hs) {
  296. CBB cbb, body, extensions;
  297. if (!ssl->method->init_message(ssl, &cbb, &body, SSL3_MT_SERVER_HELLO) ||
  298. !CBB_add_u16(&body, ssl->version) ||
  299. !RAND_bytes(ssl->s3->server_random, sizeof(ssl->s3->server_random)) ||
  300. !CBB_add_bytes(&body, ssl->s3->server_random, SSL3_RANDOM_SIZE) ||
  301. !CBB_add_u16(&body, ssl_cipher_get_value(ssl->s3->tmp.new_cipher)) ||
  302. !CBB_add_u16_length_prefixed(&body, &extensions) ||
  303. !ssl_ext_pre_shared_key_add_serverhello(ssl, &extensions) ||
  304. !ssl_ext_key_share_add_serverhello(ssl, &extensions) ||
  305. !ssl->method->finish_message(ssl, &cbb)) {
  306. CBB_cleanup(&cbb);
  307. return ssl_hs_error;
  308. }
  309. hs->state = state_send_encrypted_extensions;
  310. return ssl_hs_write_message;
  311. }
  312. static enum ssl_hs_wait_t do_send_encrypted_extensions(SSL *ssl,
  313. SSL_HANDSHAKE *hs) {
  314. if (!tls13_set_handshake_traffic(ssl)) {
  315. return ssl_hs_error;
  316. }
  317. CBB cbb, body;
  318. if (!ssl->method->init_message(ssl, &cbb, &body,
  319. SSL3_MT_ENCRYPTED_EXTENSIONS) ||
  320. !ssl_add_serverhello_tlsext(ssl, &body) ||
  321. !ssl->method->finish_message(ssl, &cbb)) {
  322. CBB_cleanup(&cbb);
  323. return ssl_hs_error;
  324. }
  325. hs->state = state_send_certificate_request;
  326. return ssl_hs_write_message;
  327. }
  328. static enum ssl_hs_wait_t do_send_certificate_request(SSL *ssl,
  329. SSL_HANDSHAKE *hs) {
  330. /* Determine whether to request a client certificate. */
  331. ssl->s3->tmp.cert_request = !!(ssl->verify_mode & SSL_VERIFY_PEER);
  332. /* CertificateRequest may only be sent in certificate-based ciphers. */
  333. if (!ssl_cipher_uses_certificate_auth(ssl->s3->tmp.new_cipher)) {
  334. ssl->s3->tmp.cert_request = 0;
  335. }
  336. if (!ssl->s3->tmp.cert_request) {
  337. /* Skip this state. */
  338. hs->state = state_send_server_certificate;
  339. return ssl_hs_ok;
  340. }
  341. CBB cbb, body, sigalgs_cbb;
  342. if (!ssl->method->init_message(ssl, &cbb, &body,
  343. SSL3_MT_CERTIFICATE_REQUEST) ||
  344. !CBB_add_u8(&body, 0 /* no certificate_request_context. */)) {
  345. goto err;
  346. }
  347. const uint16_t *sigalgs;
  348. size_t num_sigalgs = tls12_get_psigalgs(ssl, &sigalgs);
  349. if (!CBB_add_u16_length_prefixed(&body, &sigalgs_cbb)) {
  350. goto err;
  351. }
  352. for (size_t i = 0; i < num_sigalgs; i++) {
  353. if (!CBB_add_u16(&sigalgs_cbb, sigalgs[i])) {
  354. goto err;
  355. }
  356. }
  357. if (!ssl_add_client_CA_list(ssl, &body) ||
  358. !CBB_add_u16(&body, 0 /* empty certificate_extensions. */) ||
  359. !ssl->method->finish_message(ssl, &cbb)) {
  360. goto err;
  361. }
  362. hs->state = state_send_server_certificate;
  363. return ssl_hs_write_message;
  364. err:
  365. CBB_cleanup(&cbb);
  366. return ssl_hs_error;
  367. }
  368. static enum ssl_hs_wait_t do_send_server_certificate(SSL *ssl,
  369. SSL_HANDSHAKE *hs) {
  370. if (!ssl_cipher_uses_certificate_auth(ssl->s3->tmp.new_cipher)) {
  371. hs->state = state_send_server_finished;
  372. return ssl_hs_ok;
  373. }
  374. if (!ssl_has_certificate(ssl)) {
  375. OPENSSL_PUT_ERROR(SSL, SSL_R_NO_CERTIFICATE_SET);
  376. return ssl_hs_error;
  377. }
  378. if (!tls13_prepare_certificate(ssl)) {
  379. return ssl_hs_error;
  380. }
  381. hs->state = state_send_server_certificate_verify;
  382. return ssl_hs_write_message;
  383. }
  384. static enum ssl_hs_wait_t do_send_server_certificate_verify(SSL *ssl,
  385. SSL_HANDSHAKE *hs,
  386. int is_first_run) {
  387. switch (tls13_prepare_certificate_verify(ssl, is_first_run)) {
  388. case ssl_private_key_success:
  389. hs->state = state_send_server_finished;
  390. return ssl_hs_write_message;
  391. case ssl_private_key_retry:
  392. hs->state = state_complete_server_certificate_verify;
  393. return ssl_hs_private_key_operation;
  394. case ssl_private_key_failure:
  395. return ssl_hs_error;
  396. }
  397. assert(0);
  398. return ssl_hs_error;
  399. }
  400. static enum ssl_hs_wait_t do_send_server_finished(SSL *ssl, SSL_HANDSHAKE *hs) {
  401. if (!tls13_prepare_finished(ssl)) {
  402. return ssl_hs_error;
  403. }
  404. hs->state = state_flush;
  405. return ssl_hs_write_message;
  406. }
  407. static enum ssl_hs_wait_t do_flush(SSL *ssl, SSL_HANDSHAKE *hs) {
  408. /* Update the secret to the master secret and derive traffic keys. */
  409. if (!tls13_advance_key_schedule(ssl, kZeroes, hs->hash_len) ||
  410. !tls13_derive_traffic_secret_0(ssl) ||
  411. !tls13_set_traffic_key(ssl, type_data, evp_aead_seal,
  412. hs->traffic_secret_0, hs->hash_len)) {
  413. return ssl_hs_error;
  414. }
  415. hs->state = state_process_client_certificate;
  416. return ssl_hs_flush_and_read_message;
  417. }
  418. static enum ssl_hs_wait_t do_process_client_certificate(SSL *ssl,
  419. SSL_HANDSHAKE *hs) {
  420. if (!ssl->s3->tmp.cert_request) {
  421. /* OpenSSL returns X509_V_OK when no certificates are requested. This is
  422. * classed by them as a bug, but it's assumed by at least NGINX. */
  423. ssl->s3->new_session->verify_result = X509_V_OK;
  424. /* Skip this state. */
  425. hs->state = state_process_client_finished;
  426. return ssl_hs_ok;
  427. }
  428. const int allow_anonymous =
  429. (ssl->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT) == 0;
  430. if (!tls13_check_message_type(ssl, SSL3_MT_CERTIFICATE) ||
  431. !tls13_process_certificate(ssl, allow_anonymous) ||
  432. !ssl->method->hash_current_message(ssl)) {
  433. return ssl_hs_error;
  434. }
  435. /* For historical reasons, the server's copy of the chain does not include the
  436. * leaf while the client's does. */
  437. if (sk_X509_num(ssl->s3->new_session->cert_chain) > 0) {
  438. X509_free(sk_X509_shift(ssl->s3->new_session->cert_chain));
  439. }
  440. hs->state = state_process_client_certificate_verify;
  441. return ssl_hs_read_message;
  442. }
  443. static enum ssl_hs_wait_t do_process_client_certificate_verify(
  444. SSL *ssl, SSL_HANDSHAKE *hs) {
  445. if (ssl->s3->new_session->peer == NULL) {
  446. /* Skip this state. */
  447. hs->state = state_process_client_finished;
  448. return ssl_hs_ok;
  449. }
  450. if (!tls13_check_message_type(ssl, SSL3_MT_CERTIFICATE_VERIFY) ||
  451. !tls13_process_certificate_verify(ssl) ||
  452. !ssl->method->hash_current_message(ssl)) {
  453. return 0;
  454. }
  455. hs->state = state_process_client_finished;
  456. return ssl_hs_read_message;
  457. }
  458. static enum ssl_hs_wait_t do_process_client_finished(SSL *ssl,
  459. SSL_HANDSHAKE *hs) {
  460. if (!tls13_check_message_type(ssl, SSL3_MT_FINISHED) ||
  461. !tls13_process_finished(ssl) ||
  462. !ssl->method->hash_current_message(ssl) ||
  463. /* evp_aead_seal keys have already been switched. */
  464. !tls13_set_traffic_key(ssl, type_data, evp_aead_open,
  465. hs->traffic_secret_0, hs->hash_len) ||
  466. !tls13_finalize_keys(ssl)) {
  467. return ssl_hs_error;
  468. }
  469. ssl->method->received_flight(ssl);
  470. hs->state = state_send_new_session_ticket;
  471. return ssl_hs_ok;
  472. }
  473. static enum ssl_hs_wait_t do_send_new_session_ticket(SSL *ssl,
  474. SSL_HANDSHAKE *hs) {
  475. SSL_SESSION *session = ssl->s3->new_session;
  476. session->tlsext_tick_lifetime_hint = session->timeout;
  477. session->ticket_flags = SSL_TICKET_ALLOW_DHE_RESUMPTION;
  478. if (!RAND_bytes((uint8_t *)&session->ticket_age_add,
  479. sizeof(session->ticket_age_add))) {
  480. return 0;
  481. }
  482. session->ticket_age_add_valid = 1;
  483. CBB cbb, body, ticket;
  484. if (!ssl->method->init_message(ssl, &cbb, &body,
  485. SSL3_MT_NEW_SESSION_TICKET) ||
  486. !CBB_add_u32(&body, session->tlsext_tick_lifetime_hint) ||
  487. !CBB_add_u32(&body, session->ticket_flags) ||
  488. !CBB_add_u32(&body, session->ticket_age_add) ||
  489. !CBB_add_u16(&body, 0 /* no ticket extensions */) ||
  490. !CBB_add_u16_length_prefixed(&body, &ticket) ||
  491. !ssl_encrypt_ticket(ssl, &ticket, session) ||
  492. !ssl->method->finish_message(ssl, &cbb)) {
  493. CBB_cleanup(&cbb);
  494. return ssl_hs_error;
  495. }
  496. hs->session_tickets_sent++;
  497. hs->state = state_flush_new_session_ticket;
  498. return ssl_hs_write_message;
  499. }
  500. /* TLS 1.3 recommends single-use tickets, so issue multiple tickets in case the
  501. * client makes several connections before getting a renewal. */
  502. static const int kNumTickets = 2;
  503. static enum ssl_hs_wait_t do_flush_new_session_ticket(SSL *ssl,
  504. SSL_HANDSHAKE *hs) {
  505. if (hs->session_tickets_sent >= kNumTickets) {
  506. hs->state = state_done;
  507. } else {
  508. hs->state = state_send_new_session_ticket;
  509. }
  510. return ssl_hs_flush;
  511. }
  512. enum ssl_hs_wait_t tls13_server_handshake(SSL *ssl) {
  513. SSL_HANDSHAKE *hs = ssl->s3->hs;
  514. while (hs->state != state_done) {
  515. enum ssl_hs_wait_t ret = ssl_hs_error;
  516. enum server_hs_state_t state = hs->state;
  517. switch (state) {
  518. case state_process_client_hello:
  519. ret = do_process_client_hello(ssl, hs);
  520. break;
  521. case state_select_parameters:
  522. ret = do_select_parameters(ssl, hs);
  523. break;
  524. case state_send_hello_retry_request:
  525. ret = do_send_hello_retry_request(ssl, hs);
  526. break;
  527. case state_flush_hello_retry_request:
  528. ret = do_flush_hello_retry_request(ssl, hs);
  529. break;
  530. case state_process_second_client_hello:
  531. ret = do_process_second_client_hello(ssl, hs);
  532. break;
  533. case state_send_server_hello:
  534. ret = do_send_server_hello(ssl, hs);
  535. break;
  536. case state_send_encrypted_extensions:
  537. ret = do_send_encrypted_extensions(ssl, hs);
  538. break;
  539. case state_send_certificate_request:
  540. ret = do_send_certificate_request(ssl, hs);
  541. break;
  542. case state_send_server_certificate:
  543. ret = do_send_server_certificate(ssl, hs);
  544. break;
  545. case state_send_server_certificate_verify:
  546. ret = do_send_server_certificate_verify(ssl, hs, 1 /* first run */);
  547. break;
  548. case state_complete_server_certificate_verify:
  549. ret = do_send_server_certificate_verify(ssl, hs, 0 /* complete */);
  550. break;
  551. case state_send_server_finished:
  552. ret = do_send_server_finished(ssl, hs);
  553. break;
  554. case state_flush:
  555. ret = do_flush(ssl, hs);
  556. break;
  557. case state_process_client_certificate:
  558. ret = do_process_client_certificate(ssl, hs);
  559. break;
  560. case state_process_client_certificate_verify:
  561. ret = do_process_client_certificate_verify(ssl, hs);
  562. break;
  563. case state_process_client_finished:
  564. ret = do_process_client_finished(ssl, hs);
  565. break;
  566. case state_send_new_session_ticket:
  567. ret = do_send_new_session_ticket(ssl, hs);
  568. break;
  569. case state_flush_new_session_ticket:
  570. ret = do_flush_new_session_ticket(ssl, hs);
  571. break;
  572. case state_done:
  573. ret = ssl_hs_ok;
  574. break;
  575. }
  576. if (ret != ssl_hs_ok) {
  577. return ret;
  578. }
  579. }
  580. return ssl_hs_ok;
  581. }