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