У меня установлена 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
. С его помощью вы можете убедиться, что соединение не использует какой-либо шифр, который вам не нужен, даже если он разрешен в конфигурации сервера. Однако, если у вас есть власть над обоими, это должно быть настроено в первую очередь на стороне сервера.