| =pod |
| |
| =head1 NAME |
| |
| SSL_set_num_tickets, |
| SSL_get_num_tickets, |
| SSL_CTX_set_num_tickets, |
| SSL_CTX_get_num_tickets, |
| SSL_new_session_ticket |
| - control the number of TLSv1.3 session tickets that are issued |
| |
| =head1 SYNOPSIS |
| |
| #include <openssl/ssl.h> |
| |
| int SSL_set_num_tickets(SSL *s, size_t num_tickets); |
| size_t SSL_get_num_tickets(const SSL *s); |
| int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets); |
| size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx); |
| int SSL_new_session_ticket(SSL *s); |
| |
| =head1 DESCRIPTION |
| |
| SSL_CTX_set_num_tickets() and SSL_set_num_tickets() can be called for a server |
| application and set the number of TLSv1.3 session tickets that will be sent to |
| the client after a full handshake. Set the desired value (which could be 0) in |
| the B<num_tickets> argument. Typically these functions should be called before |
| the start of the handshake. |
| |
| The default number of tickets is 2. Following a resumption the number of tickets |
| issued will never be more than 1 regardless of the value set via |
| SSL_set_num_tickets() or SSL_CTX_set_num_tickets(). If B<num_tickets> is set to |
| 0 then no tickets will be issued for either a normal connection or a resumption. |
| |
| Tickets are also issued on receipt of a post-handshake certificate from the |
| client following a request by the server using |
| L<SSL_verify_client_post_handshake(3)>. These new tickets will be associated |
| with the updated client identity (i.e. including their certificate and |
| verification status). The number of tickets issued will normally be the same as |
| was used for the initial handshake. If the initial handshake was a full |
| handshake then SSL_set_num_tickets() can be called again prior to calling |
| SSL_verify_client_post_handshake() to update the number of tickets that will be |
| sent. |
| |
| To issue tickets after other events (such as application-layer changes), |
| SSL_new_session_ticket() is used by a server application to request that a new |
| ticket be sent when it is safe to do so. New tickets are only allowed to be |
| sent in this manner after the initial handshake has completed, and only for |
| TLS 1.3 connections. By default, the ticket generation and transmission are |
| delayed until the server is starting a new write operation, so that it is |
| bundled with other application data being written and properly aligned to a |
| record boundary. If the connection was at a record boundary when |
| SSL_new_session_ticket() was called, the ticket can be sent immediately |
| (without waiting for the next application write) by calling |
| SSL_do_handshake(). SSL_new_session_ticket() can be called more than once to |
| request additional tickets be sent; all such requests are queued and written |
| together when it is safe to do so and triggered by SSL_write() or |
| SSL_do_handshake(). Note that a successful return from |
| SSL_new_session_ticket() indicates only that the request to send a ticket was |
| processed, not that the ticket itself was sent. To be notified when the |
| ticket itself is sent, a new-session callback can be registered with |
| L<SSL_CTX_sess_set_new_cb(3)> that will be invoked as the ticket or tickets |
| are generated. |
| |
| SSL_CTX_get_num_tickets() and SSL_get_num_tickets() return the number of |
| tickets set by a previous call to SSL_CTX_set_num_tickets() or |
| SSL_set_num_tickets(), or 2 if no such call has been made. |
| |
| =head1 RETURN VALUES |
| |
| SSL_CTX_set_num_tickets(), SSL_set_num_tickets(), and |
| SSL_new_session_ticket() return 1 on success or 0 on failure. |
| |
| SSL_CTX_get_num_tickets() and SSL_get_num_tickets() return the number of tickets |
| that have been previously set. |
| |
| =head1 SEE ALSO |
| |
| L<ssl(7)> |
| |
| =head1 HISTORY |
| |
| SSL_new_session_ticket() was added in OpenSSL 3.0.0. |
| SSL_set_num_tickets(), SSL_get_num_tickets(), SSL_CTX_set_num_tickets(), and |
| SSL_CTX_get_num_tickets() were added in OpenSSL 1.1.1. |
| |
| =head1 COPYRIGHT |
| |
| Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. |
| |
| Licensed under the Apache License 2.0 (the "License"). You may not use |
| this file except in compliance with the License. You can obtain a copy |
| in the file LICENSE in the source distribution or at |
| L<https://www.openssl.org/source/license.html>. |
| |
| =cut |