Nesta postagem do blog, revisamos alguns dos aspectos importantes da configuração e gerenciamento de SSL na hospedagem MySQL. Isso inclui a configuração padrão, desabilitando o SSL e habilitando e aplicando o SSL em um servidor MySQL. Nossas observações são baseadas na versão da comunidade do MySQL 5.7.21.
Configuração SSL padrão no MySQL
Por padrão, o servidor MySQL sempre instala e habilita a configuração SSL. No entanto, não é obrigatório que os clientes se conectem usando SSL. Os clientes podem optar por se conectar com ou sem SSL, pois o servidor permite os dois tipos de conexões. Vamos ver como verificar esse comportamento padrão do servidor MySQL.
Quando o SSL é instalado e habilitado no servidor MySQL por padrão, normalmente veremos o seguinte:
- Presença de arquivos *.pem no diretório de dados do MySQL. Estes são os vários certificados e chaves de cliente e servidor que estão em uso para SSL, conforme descrito aqui.
- Haverá uma nota no arquivo de log de erros do mysqld durante a inicialização do servidor, como:
- [Nota] Encontrado ca.pem, server-cert.pem e server-key.pem no diretório de dados. Tentando ativar o suporte SSL usando-os.
- O valor da variável ‘have_ssl’ será YES:
mysql> mostra variáveis como ‘have_ssl’;
+—————+——-+
| Nome_variável | Valor |
+—————+——-+
| have_ssl | SIM |
+—————+——-+
Com relação ao cliente MySQL, por padrão, ele sempre tenta ir para a conexão de rede criptografada com o servidor e, se isso falhar, ele volta para o modo não criptografado.
Então, conectando-se ao servidor MySQL usando o comando:
mysql -h
Podemos verificar se a conexão do cliente atual está criptografada ou não usando o comando status:
mysql> status
————–
mysql Ver 14.14 Distrib 5.7.21, para Linux (x86_64) usando EditLine wrapper
ID de conexão: 75
Banco de dados atual:
Usuário atual: [email protected]
SSL: A cifra em uso é DHE-RSA-AES256-SHA
Pager atual: stdout
Usando arquivo de saída: ”
Usando delimitador: ;
Versão do servidor: 5.7.21-log MySQL Community Server (GPL)
Versão do protocolo: 10
Conexão: 127.0.0.1 via TCP/IP
…………………………..
O campo SSL destacado acima indica que a conexão está criptografada. Podemos, no entanto, pedir ao cliente MySQL para se conectar sem SSL usando o comando:
mysql -h
mysql> status
————–
ID de conexão: 93
Banco de dados atual:
Usuário atual: [email protected]
SSL: Não está em uso
Pager atual: stdout
Usando arquivo de saída: ”
Usando delimitador: ;
Versão do servidor: 5.7.21-log MySQL Community Server (GPL)
Versão do protocolo: 10
Conexão: 127.0.0.1 via TCP/IP
……………………………
Podemos ver que, embora o SSL esteja habilitado no servidor, podemos nos conectar a ele sem SSL.
Tutorial MySQL - Como configurar e gerenciar SSL em seu servidor #MySQLClique para tweet
Desativando SSL no MySQL
Se o seu requisito é desativar completamente o SSL no servidor MySQL em vez da opção padrão de 'ativado, mas modo opcional', podemos fazer o seguinte:
- Exclua o certificado *.pem e os arquivos de chave no diretório de dados do MySQL.
- Inicie o MySQL com a opção SSL desativada. Isso pode ser feito adicionando uma entrada de linha:
ssl=0 no arquivo my.cnf.
Podemos observar que:
- NÃO haverá nenhuma nota nos logs do mysqld como :
- [Nota] Encontrado ca.pem, server-cert.pem e server-key.pem no diretório de dados. Tentando ativar o suporte SSL usando-os.
- O valor da variável 'have_ssl' será DESATIVADO:
mysql> mostra variáveis como ‘have_ssl’;
+—————+——-+
| Nome_variável | Valor |
+—————+——-+
| have_ssl | DESATIVADO |
+—————+——-+
Aplicando SSL no MySQL
Vimos que embora o SSL estivesse habilitado por padrão no servidor MySQL, ele não era aplicado e ainda podíamos conectar sem SSL.
Agora, definindo a variável de sistema require_secure_transport, poderemos impor que o servidor aceite apenas conexões SSL. Isso pode ser verificado tentando se conectar ao servidor MySQL com o comando:
mysql -h
E podemos ver que a conexão seria recusada com a seguinte mensagem de erro do servidor:
ERRO 3159 (HY000):Conexões usando transporte inseguro são proibidas enquanto –require_secure_transport=ON.
Considerações SSL para canais de replicação
Por padrão, em uma configuração de replicação do MySQL, os escravos se conectam ao mestre sem criptografia.
Portanto, para se conectar a um mestre de maneira segura para tráfego de replicação, os escravos devem usar MASTER_SSL=1; como parte do 'MUDAR MESTRE PARA' comando que especifica os parâmetros para se conectar ao mestre. Observe que esta opção também é obrigatória caso seu mestre esteja configurado para impor a conexão SSL usando require_secure_transport.