Назад | Перейти на главную страницу

Использование сертификата / ключа SSL по умолчанию в MySQL 5.7?

У меня установлена ​​Percona MySQL 5.7 (5.7.21-20-log) с использованием apt-get, когда я подключаю его с помощью учетной записи root и проверяю статус ssl

# mysql --ssl
mysql> show variables like '%ssl%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| have_openssl  | YES             |
| have_ssl      | YES             |
| ssl_ca        | ca.pem          |
| ssl_capath    |                 |
| ssl_cert      | server-cert.pem |
| ssl_cipher    |                 |
| ssl_crl       |                 |
| ssl_crlpath   |                 |
| ssl_key       | server-key.pem  |
+---------------+-----------------+

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.7.21-20, for debian-linux-gnu (x86_64) using  6.3

Connection id:      31
Current database:
Current user:       root@localhost
SSL:            Cipher in use is ECDHE-RSA-AES128-GCM-SHA256

Так что по умолчанию используется SSL. Однако, когда я использую полную команду

mysql -h 127.0.0.1 -P 3306 -u root  -p  --ssl-ca=/var/lib/mysql/ca.pem --ssl-cert=/var/lib/mysql/server-cert.pem --ssl-key=/var/lib/mysql/server-key.pem

Он возвращает ошибку

ERROR 2026 (HY000): SSL connection error: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed

Ваша проблема заключается в использовании сертификата сервера и ключа на стороне клиента.

--ssl-cert=/var/lib/mysql/server-cert.pem --ssl-key=/var/lib/mysql/server-key.pem

Как указано в 6.4.2 Параметры команд для зашифрованных соединений (курсив мой):

--ssl-cert=file_name

Путь к файлу сертификата открытого ключа SSL в формате PEM. На стороне клиента это сертификат открытого ключа клиента.. На стороне сервера это сертификат открытого ключа сервера. На стороне сервера этот вариант подразумевает --ssl.

--ssl-key=file_name

Путь к файлу закрытого ключа SSL в формате PEM. На стороне клиента это закрытый ключ клиента. На стороне сервера это закрытый ключ сервера. На стороне сервера этот вариант подразумевает --ssl.

Вы можете принудительно установить TLS-соединение, используя --ssl, в одиночестве:

mysql -h 127.0.0.1 -P 3306 -u root -p --ssl

Здесь также может оказаться полезным --ssl-cipher=cipher_list. С его помощью вы можете убедиться, что соединение не использует какой-либо шифр, который вам не нужен, даже если он разрешен в конфигурации сервера. Однако, если у вас есть власть над обоими, это должно быть настроено в первую очередь на стороне сервера.