Eu tenho um Percona MySQL 5.7 (5.7.21-20-log) instalado usando apt-get
, quando eu o conecto usando a conta root e verifico o status do 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
Portanto, por padrão, SSL está sendo usado. No entanto, quando uso o 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
Ele retorna erro
ERROR 2026 (HY000): SSL connection error: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
Responder1
Seu problema é usar o certificado e a chave do servidor no lado do cliente.
--ssl-cert=/var/lib/mysql/server-cert.pem --ssl-key=/var/lib/mysql/server-key.pem
Conforme documentado em6.4.2 Opções de comando para conexões criptografadas(a ênfase é minha):
--ssl-cert=file_name
O nome do caminho do arquivo de certificado de chave pública SSL no formato PEM.No lado do cliente, este é o certificado de chave pública do cliente. No lado do servidor, este é o certificado de chave pública do servidor. No lado do servidor, esta opção implica
--ssl
.--ssl-key=file_name
O nome do caminho do arquivo de chave privada SSL no formato PEM. Do lado do cliente, este é ochave privada do cliente. No lado do servidor, esta é a chave privada do servidor. No lado do servidor, esta opção implica
--ssl
.
Você pode forçar a conexão TLS usando --ssl
apenas:
mysql -h 127.0.0.1 -P 3306 -u root -p --ssl
Útil aqui também pode ser o arquivo --ssl-cipher=cipher_list
. Com ele você pode verificar se a conexão não utiliza nenhuma cifra que você não deseja mesmo quando permitida na configuração do servidor. No entanto, quando você tiver poder sobre ambos, isso deverá ser configurado principalmente no lado do servidor.