Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como habilitar SSL/TLS para MySQL no Ubuntu


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=mysql

Generating 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.