Uso de certificado/chave SSL padrão no MySQL 5.7?

Uso de certificado/chave SSL padrão no MySQL 5.7?

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 --sslapenas:

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.

informação relacionada