Tengo Percona MySQL 5.7 (5.7.21-20-log) instalado usando apt-get
, cuando lo conecto usando la cuenta raíz y verifico el estado de 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
Entonces, de forma predeterminada, se utiliza SSL. Sin embargo, cuando uso el comando completo
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
Devuelve error
ERROR 2026 (HY000): SSL connection error: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
Respuesta1
Su problema es utilizar el certificado y la clave del servidor en el lado del cliente.
--ssl-cert=/var/lib/mysql/server-cert.pem --ssl-key=/var/lib/mysql/server-key.pem
Como se documenta en6.4.2 Opciones de comando para conexiones cifradas(el énfasis es mío):
--ssl-cert=file_name
El nombre de la ruta del archivo del certificado de clave pública SSL en formato PEM.Del lado del cliente, este es el certificado de clave pública del cliente.. Del lado del servidor, este es el certificado de clave pública del servidor. Del lado del servidor, esta opción implica
--ssl
.--ssl-key=file_name
El nombre de la ruta del archivo de clave privada SSL en formato PEM. Del lado del cliente, este es elclave privada del cliente. Del lado del servidor, esta es la clave privada del servidor. Del lado del servidor, esta opción implica
--ssl
.
Puedes forzar la conexión TLS usando --ssl
, solo:
mysql -h 127.0.0.1 -P 3306 -u root -p --ssl
Útil aquí también podría ser el archivo --ssl-cipher=cipher_list
. Con él puedes verificar que la conexión no utiliza ningún cifrado que no desees incluso cuando esté permitido en la configuración del servidor. Sin embargo, cuando tenga poder sobre ambos, esto debe configurarse principalmente en el lado del servidor.