O MySQL permite que os usuários se conectem com segurança a bancos de dados usando certificados SSL/TLS. Neste artigo, veremos a Configuração SSL do MySQL – como habilitar SSL/TLS para MySQL no Ubuntu.
Como habilitar SSL/TLS para MySQL
Aqui estão as etapas para configurar conexões SSL no MySQL.
1. Instale o MySQL
Abra o terminal e execute os seguintes comandos para instalar o MySQL.
$ sudo apt-get update $ sudo apt-get install mysql-client
Bônus de leitura:MySQL Change Collation of All Tables
2. Verifique o status SSL
Faça login no MySQL como root
$ mysql -uroot -p
Você será solicitado a senha de root. Após o login, digite o seguinte comando para encontrar o status SSL/TLS atual
mysql> SHOW VARIABLES LIKE '%ssl%'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_openssl | DISABLED | | have_ssl | DISABLED | | ssl_ca | | | ssl_capath | | | ssl_cert | | | ssl_cipher | | | ssl_crl | | | ssl_crlpath | | | ssl_key | | +---------------+----------+
Você descobrirá que have_openssl e have_ssl ambos têm valor DISABLED. Isso significa que o SSL não está habilitado no MySQL.
Bônus de leitura:Principais blogs de banco de dados a seguir
3. Gere certificados SSL/TLS
Em seguida, precisamos gerar certificados SSL/TLS e apontar o servidor MySQL para seus locais. Normalmente, as pessoas usam openssl para gerar certificados SSL e depois movê-los para /var/lib/mysql que é o local padrão dos arquivos SSL para o servidor MySQL.
No entanto, o MySQL 5.7 e versões posteriores já vêm com um utilitário mysql_ssl_rsa_setup para simplificar este processo. Ele gera certificados SSL e os armazena em /var/lib/mysql.
Como precisamos do processo mysql para poder ler esses arquivos, faremos o mysql como o proprietário desses arquivos, conforme mostrado abaixo.
Execute o seguinte comando para gerar certificados SSL
$ sudo mysql_ssl_rsa_setup --uid=mysqlGenerating a 2048 bit RSA private key ...................................+++ .....+++
writing new private key to 'ca-key.pem'
-----
Generating a 2048 bit RSA private key ......+++ .................................+++
writing new private key to 'server-key.pem'
-----
Generating a 2048 bit RSA private key ......................................................+++ .................................................................................+++
writing new private key to 'client-key.pem'
-----
Você pode verificar os arquivos gerados executando o seguinte comando
$ ls -all /var/lib/mysql/*.pem
Você verá algo como o seguinte
256740 4 -rw-r--r-- 1 mysql mysql 1078 May 1 12:24 /var/lib/mysql/server-cert.pem 256735 4 -rw------- 1 mysql mysql 1675 May 1 12:24 /var/lib/mysqlsql/ca-key.pem 256739 4 -rw-r--r-- 1 mysql mysql 451 May 1 12:24 /var/lib/mysqlsql/public_key.pem 256741 4 -rw------- 1 mysql mysql 1689 May 1 12:24 /var/lib/mysqlsql/client-key.pem 256737 4 -rw-r--r-- 1 mysql mysql 1064 May 1 12:24 /var/lib/mysqlsql/ca.pem 256743 4 -rw-r--r-- 1 mysql mysql 1048 May 1 12:24 /var/lib/mysqlsql/client-cert.pem 256736 4 -rw------- 1 mysql mysql 1625 May 1 12:24 /var/lib/mysqlsql/private_key.pem 256738 4 -rw------- 1 mysql mysql 1615 May 1 12:24 /var/lib/mysqlsql/server-key.pem
Estes são o arquivo de certificado SSL e os pares de chaves privadas para autoridade de certificação, servidor MySQL e cliente MySQL.
Bônus de leitura:Principais alternativas do MySQL Workbench
4. Habilitar conexões SSL no servidor MySQL
Em seguida, reinicie o MySQL Server para habilitar SSL/TLS no MySQL.
$ sudo systemctl restart mysql
O MySQL Server procurará automaticamente por arquivos de certificado SSL em /var/lib/mysql quando for iniciado. Portanto, você não precisa especificar manualmente sua localização no arquivo de configuração do MySQL.
Bônus de leitura:Como habilitar o cache de consulta do MySQL
5. Verifique a conexão SSL
Faça login no MySQL como antes (etapa 2) e execute o seguinte comando.
SHOW VARIABLES LIKE '%ssl%'; Output +---------------+-----------------+ | 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 | +---------------+-----------------+
Agora você encontrará have_openssl e have_ssl variáveis são SIM. Você também verá que ssl_ca , ssl_cert e ssl_key são preenchidos com valores apropriados.
Você também pode verificar os detalhes da sua conexão.
mysql>\s
--------------
. . .
SSL: Cipher in use is DHE-RSA-AES256-SHA
. . .
Connection: 127.0.0.1 via TCP/IP
. . .
--------------
6. Configurar SSL para conexão remota (opcional)
Se o seu servidor MySQL tiver conexões de entrada remotas, você poderá habilitar o SSL para conexão remota e até torná-lo obrigatório modificando o arquivo de configuração do servidor MySQL.
Abra o terminal e execute o seguinte comando para abrir a configuração do MySQL.
$ sudo vi /etc/mysql/my.cnf
Adicione o bloco de código [mysqld] como mostrado, abaixo das duas instruções !includedir.
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
[mysqld]
# Require clients to connect either using SSL
# or through a local socket file
require_secure_transport = ON
bind-address = 0.0.0.0
Na última linha, definimos o endereço de ligação como 0.0.0.0 para permitir conexões remotas. Você não precisa adicioná-lo se já ativou conexões remotas.
Reinicie o MySQL Server para aplicar as alterações. A partir de agora, o MySQL exigirá SSL.
Para conexões remotas, não se esqueça de abrir a porta 443, em vez da 3306 padrão. Isso ocorre porque as conexões SSL acontecem na porta 443 e não na 3306.
Espero que este artigo o ajude a habilitar a conexão SSL/TLS no MySQL.