8.3.5 Использование повторно сессий SSL
Программы-клиенты MySQL могут выбрать возобновление предыдущей сессии SSL при условии, что сервер имеет сессию в кэше своего выполнения. В этом разделе описываются условия, благоприятные для повторного использования сессии SSL, переменные сервера, используемые для управления и мониторинга кэша сессий, и параметры командной строки клиента для сохранения и повторного использования данных сессии.
Каждый полный обмен TLS может быть дорогостоящим с точки зрения вычислений и сетевой нагрузки, менее дорогостоящим, если используется TLSv1.3. Вытянув билет сессии из установленной сессии и затем представив этот билет при установлении следующего соединения, общая стоимость уменьшается, если сессия может быть повторно использована. Например, рассмотрите преимущества веб-страниц, которые могут открывать несколько соединений и генерировать более быструю работу.
В целом, для повторного использования сессий SSL должны быть выполнены следующие условия:
Сервер должен сохранять свой кэш сессий в оперативной памяти.
Таймаут кэша сессий на стороне сервера не должен истечь.
Каждый клиент должен поддерживать кэш активных сессий и хранить его в безопасности.
Приложения C могут использовать возможности API C для включения повторного использования сессий для зашифрованных соединений (см. ).
Настройка и мониторинг работы кэша сессий SSL на стороне сервера
Для создания начального контекста TLS сервер использует значения, которые имеют переменные системы, связанные с контекстом, при запуске. Для отображения значений контекста сервер также инициализирует набор соответствующих переменных состояния. В следующей таблице показаны переменные системы, определяющие кэш сессий сервера во время выполнения, и соответствующие переменные состояния, которые отображают текущие активные значения кэша сессий.
Таблица 8.13 Системные и переменные состояния для повторного использования сессий
| Имя системной переменной | Соответствующее имя переменной состояния |
|---|---|
ssl_session_cache_mode | Ssl_session_cache_mode |
ssl_session_cache_timeout | Ssl_session_cache_timeout |
Когда значение системной переменной ssl_session_cache_mode равно ON, что является стандартным режимом, значение переменной состояния Ssl_session_cache_mode равно SERVER.
Переменные кэша сессий SSL применяются как к каналам TLS mysql_main, так и к каналам TLS mysql_admin. Их значения также отображаются как свойства в таблице Performance Schema tls_channel_status, наряду со свойствами других активных контекстов TLS.
Для переконфигурации кэша сессий SSL во время выполнения выполните эту процедуру:
-
Установите каждую системную переменную, связанную с кэшем, которую нужно изменить, на новое значение. Например, измените значение таймаута кэша со стандартного (300 секунд) на 600 секунд:
mysql>
SET GLOBAL ssl_session_cache_timeout = 600;Члены каждой пары системных и переменных состояния могут временно иметь разные значения из-за того, как работает процедура переконфигурации.
mysql>
SHOW VARIABLES LIKE 'ssl_session_cache_timeout';+---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | ssl_session_cache_timeout | 600 | +---------------------------+-------+ 1 row in set (0.00 sec) mysql>SHOW STATUS LIKE 'Ssl_session_cache_timeout';+---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | Ssl_session_cache_timeout | 300 | +---------------------------+-------+ 1 row in set (0.00 sec)Дополнительную информацию о настройке значений переменных см. в разделе Назначение системных переменных.
-
Выполните
ALTER INSTANCE RELOAD TLS. Эта команда переконфигурирует активный контекст TLS из текущих значений системных переменных, связанных с кэшем. Она также устанавливает переменные состояния, связанные с кэшем, чтобы отразить новые активные значения кэша. Для выполнения команды требуется привилегияCONNECTION_ADMIN.mysql>
ALTER INSTANCE RELOAD TLS;Query OK, 0 rows affected (0.01 sec) mysql>SHOW VARIABLES LIKE 'ssl_session_cache_timeout';+---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | ssl_session_cache_timeout | 600 | +---------------------------+-------+ 1 row in set (0.00 sec) mysql>SHOW STATUS LIKE 'Ssl_session_cache_timeout';+---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | Ssl_session_cache_timeout | 600 | +---------------------------+-------+ 1 row in set (0.00 sec)Новые соединения, установленные после выполнения команды
ALTER INSTANCE RELOAD TLS, используют новый контекст TLS. Существующие соединения не затрагиваются.
Настройка клиента для повторного использования сессий SSL
Все программы-клиенты MySQL могут повторно использовать предыдущую сессию для новых шифрованных подключений к одному и тому же серверу, при условии, что данные сессии были сохранены, пока исходное подключение было активным. Данные сессии сохраняются в файл, который вы указываете при повторном вызове клиента.
Чтобы сохранить и повторно использовать данные сессии SSL, выполните следующие действия:
Вызовите mysql, чтобы установить шифрованное подключение к серверу MySQL 8.4.
-
Используйте команду ssl_session_data_print для указания пути к файлу, в котором можно безопасно сохранить текущие данные сессии. Например:
mysql>
ssl_session_data_print ~/private-dir/session.txtДанные сессии получаются в виде строки ANSI, закодированной в PEM, с нулевым завершением. Если вы опустите путь и имя файла, строка будет выведена в стандартный вывод.
-
Из командной строки вызовите любую программу-клиента MySQL, чтобы установить новое шифрованное подключение к тому же серверу. Для повторного использования данных сессии укажите параметр командной строки
--ssl-session-dataи аргумент файла.Например, установите новое подключение с помощью mysql:
mysql -u admin -p --ssl-session-data=~/private-dir/session.txt
и затем клиента mysqlshow:
mysqlshow -u admin -p --ssl-session-data=~/private-dir/session.txt Enter password: ***** +--------------------+ | Databases | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | world | +--------------------+
В каждом примере клиент пытается возобновить исходную сессию при установлении нового подключения к тому же серверу.
Чтобы проверить, повторно ли mysql использовал сессию, см. вывод команды
status. Если текущее активное подключение mysql возобновило сессию, информация о статусе включаетSSL session reused: true.
Помимо mysql и mysqlshow, повторное использование сессий SSL применяется к mysqladmin, mysqlbinlog, mysqlcheck, mysqldump, mysqlimport, mysqlslap, mysqltest, mysql_migrate_keyring и mysql_secure_installation.
Несколько условий могут помешать успешному извлечению данных сессии. Например, если сессия не полностью подключена, это не сессия SSL, сервер ещё не отправил данные сессии или сессия SSL просто не может быть повторно использована. Даже при надлежащем хранении данных сессии кэш сессии сервера может истечь. В любом случае, по умолчанию возвращается ошибка, если вы указываете --ssl-session-data, но сессия не может быть повторно использована. Например:
mysqlshow -u admin -p --ssl-session-data=~/private-dir/session.txt
Enter password: *****
ERROR:
--ssl-session-data specified but the session was not reused.
Чтобы подавить сообщение об ошибке и установить подключение, молча создав новую сессию вместо этого, укажите --ssl-session-data-continue-on-failed-reuse в командной строке вместе с --ssl-session-data. Если таймаут кэша сервера истек, вы можете снова сохранить данные сессии в тот же файл. Время ожидания кеша сервера по умолчанию можно увеличить (см. Конфигурация и мониторинг сервера для повторного использования сессий SSL).
© 2025 Oracle
Licensed under the GPLv2 License.