8.3.3.1 Создание сертификатов SSL и RSA и ключей с помощью MySQL
MySQL предоставляет способы создания файлов сертификата и ключа SSL и пары ключей RSA, необходимых для поддержки зашифрованных подключений с использованием SSL и безопасного обмена паролями с использованием RSA по незащищенным подключениям, если эти файлы отсутствуют:
Сервер может автоматически сгенерировать эти файлы при запуске для дистрибутивов MySQL.
Автоматическое создание сервером помогает снизить барьер использования SSL, сделав генерацию необходимых файлов проще. Однако сертификаты, сгенерированные таким способом, являются самоподписанными, что может быть небезопасно. После приобретения опыта рекомендуем получить сертификаты и ключи от зарегистрированного центра сертификации.
Если клиент, подключающийся к экземпляру MySQL-сервера, использует сертификат SSL с расширением extendedKeyUsage (расширение X.509 v3), расширенное использование ключа должно включать аутентификацию клиента (clientAuth). Если сертификат SSL указан только для аутентификации сервера (serverAuth) и других целей, не связанных с сертификатами клиентов, проверка сертификата завершается неудачно, и подключение клиента к экземпляру MySQL-сервера прерывается. Расширение extendedKeyUsage в сертификатах SSL, генерируемых MySQL Server, отсутствует. Если вы используете собственный сертификат клиента, созданный другим способом, убедитесь, что любое расширение extendedKeyUsage включает аутентификацию клиента.
Автоматическая генерация файлов SSL и RSA
Для дистрибутивов MySQL, скомпилированных с использованием OpenSSL, MySQL-сервер имеет возможность автоматической генерации отсутствующих файлов SSL и RSA при запуске. Системные переменные auto_generate_certs, sha256_password_auto_generate_rsa_keys и caching_sha2_password_auto_generate_rsa_keys управляют автоматической генерацией этих файлов. Эти переменные включены по умолчанию. Они могут быть включены при запуске и просмотрены, но не изменены во время выполнения.
При запуске сервер автоматически генерирует файлы SSL-сертификата и SSL-ключа стороны клиента в каталоге данных, если системная переменная auto_generate_certs включена, не указаны никакие параметры SSL и файлы SSL серверной стороны отсутствуют в каталоге данных. Эти файлы позволяют использовать зашифрованные подключения клиентов с использованием SSL; см. Раздел 8.3.1, «Настройка MySQL для использования зашифрованных подключений».
-
Сервер проверяет каталог данных на наличие файлов SSL с указанными именами:
ca.pem server-cert.pem server-key.pem
-
Если хотя бы один из этих файлов присутствует, сервер не создает файлы SSL. В противном случае, он создает их, а также некоторые дополнительные файлы:
ca.pem Self-signed CA certificate ca-key.pem CA private key server-cert.pem Server certificate server-key.pem Server private key client-cert.pem Client certificate client-key.pem Client private key
Если сервер автоматически генерирует файлы SSL, он использует имена файлов
ca.pem,server-cert.pemиserver-key.pemдля установки соответствующих системных переменных (ssl_ca,ssl_cert,ssl_key).
При запуске сервер автоматически генерирует файлы пар ключей RSA (частный/открытый) в каталоге данных, если выполняются все эти условия: системная переменная sha256_password_auto_generate_rsa_keys или caching_sha2_password_auto_generate_rsa_keys включена; не указаны никакие параметры RSA; файлы RSA отсутствуют в каталоге данных. Эти пары ключей позволяют обеспечить безопасный обмен паролями с использованием RSA по незащищенным подключениям для учетных записей, авторизованных плагином sha256_password (устаревший) или caching_sha2_password; см. Раздел 8.4.1.3, «Аутентификация с плагином SHA-256» и Раздел 8.4.1.2, «Аутентификация с плагином кэширования SHA-2».
-
Сервер проверяет каталог данных на наличие файлов RSA с указанными именами:
private_key.pem Private member of private/public key pair public_key.pem Public member of private/public key pair
Если хотя бы один из этих файлов присутствует, сервер не создает файлы RSA. В противном случае, он создает их.
Если сервер автоматически генерирует файлы RSA, он использует их имена для установки соответствующих системных переменных (
sha256_password_private_key_pathиsha256_password_public_key_path;caching_sha2_password_private_key_pathиcaching_sha2_password_public_key_path).
Характеристики файлов SSL и RSA
Автоматически созданные сервером файлы SSL и RSA обладают следующими характеристиками:
Ключи SSL и RSA имеют размер 2048 бит.
Сертификат SSL CA самоподписанный.
Серверный и клиентский сертификаты SSL подписаны сертификатом и ключом CA с использованием алгоритма подписи
sha256WithRSAEncryption.-
Сертификаты SSL используют следующие значения общего имени (CN) с соответствующим типом сертификата (CA, Сервер, Клиент):
ca.pem: MySQL_Server_
suffix_Auto_Generated_CA_Certificate server-cert.pm: MySQL_Server_suffix_Auto_Generated_Server_Certificate client-cert.pm: MySQL_Server_suffix_Auto_Generated_Client_CertificateЗначение
suffixосновано на номере версии MySQL.Для файлов, сгенерированных сервером, если полученные значения CN превышают 64 символа, часть имени
_опускается.suffix Файлы SSL имеют пустые значения для страны (C), штата или провинции (ST), организации (O), имени подразделения организации (OU) и адреса электронной почты.
Файлы SSL, созданные сервером, действительны в течение десяти лет с момента создания.
Файлы RSA не истекают.
Файлы SSL имеют разные серийные номера для каждой пары сертификат/ключ (1 для CA, 2 для сервера, 3 для клиента).
Файлы, созданные автоматически сервером, принадлежат учетной записи, под которой работает сервер.
В системах Unix и Unix-подобных системах режим доступа к файлам составляет 644 для файлов сертификатов (т. е. доступ для всех) и 600 для файлов ключей (т. е. доступ только для учетной записи, под которой работает сервер).
Чтобы увидеть содержимое сертификата SSL (например, чтобы проверить диапазон дат, в течение которых он действителен), вызовите openssl напрямую:
openssl x509 -text -in ca.pem
openssl x509 -text -in server-cert.pem
openssl x509 -text -in client-cert.pem
Также возможно проверить информацию о сроке действия сертификата SSL с помощью следующего SQL-запроса:
mysql> SHOW STATUS LIKE 'Ssl_server_not%';
+-----------------------+--------------------------+
| Variable_name | Value |
+-----------------------+--------------------------+
| Ssl_server_not_after | Apr 28 14:16:39 2027 GMT |
| Ssl_server_not_before | May 1 14:16:39 2017 GMT |
+-----------------------+--------------------------+
© 2025 Oracle
Licensed under the GPLv2 License.