MySQL Management · 6 min read · Jan 29, 2026

Gerenciando Vários Servidores MySQL a Partir de Uma Instalação do phpMyAdmin (Usando Criptografia SSL)

Gerenciando Vários Servidores MySQL a Partir de Uma Instalação do phpMyAdmin (Usando Criptografia SSL)

Versão 1.0
Autor: Falko Timme
Siga-me no Twitter

Este tutorial explica como você pode gerenciar vários servidores MySQL a partir de uma instalação do phpMyAdmin. Por razões de segurança, a comunicação entre o phpMyAdmin e qualquer servidor MySQL remoto está usando criptografia SSL (isso não é necessário para um servidor MySQL local, uma vez que a comunicação entre o phpMyAdmin e o MySQL não sai do servidor). O phpMyAdmin é uma ferramenta de software livre escrita em PHP, destinada a lidar com a administração do MySQL pela World Wide Web. O phpMyAdmin suporta uma ampla gama de operações com o MySQL.

Não dou nenhuma garantia de que isso funcionará para você!

1 Nota Preliminar

Neste tutorial, mostrarei como gerenciar dois servidores MySQL - um local (local.example.com com o endereço IP 192.168.0.100 - este é o servidor onde o phpMyAdmin está instalado) e um servidor remoto (remote.example.com com o endereço IP 192.168.0.101) - a partir de uma instância do phpMyAdmin. Estou assumindo que o phpMyAdmin já está instalado (seja manualmente ou através do gerenciador de pacotes da sua distribuição) e funcionando (ou seja, você já deve ser capaz de gerenciar o servidor MySQL local através do phpMyAdmin) - não abordarei a instalação do phpMyAdmin aqui.

Este tutorial é baseado no Debian Wheezy/Ubuntu 12.04. Para outras distribuições, você pode ter que ajustar alguns caminhos, mas o princípio é o mesmo.

2 Habilitando o Suporte a SSL no Servidor MySQL Remoto

remote.example.com:

Faça login no MySQL…

mysql -u root -p

… e execute o seguinte comando no shell do MySQL:

show variables like '%ssl%';

Se a saída for a seguinte (ambos have_openssl e have_ssl mostram DESABILITADO)…

mysql> show variables like ’%ssl%’;
+—————+———-+
| Variable_name | Value    |
+—————+———-+
| have_openssl  | DESABILITADO |
| have_ssl      | DESABILITADO |
| ssl_ca        |          |
| ssl_capath    |          |
| ssl_cert      |          |
| ssl_cipher    |          |
| ssl_key       |          |
+—————+———-+
7 rows in set (0.00 sec)

mysql>

… isso significa que o MySQL foi compilado com suporte a SSL, mas atualmente não está habilitado. Para habilitá-lo, saia do shell do MySQL primeiro…

quit;

… e abra /etc/mysql/my.cnf:

vi /etc/mysql/my.cnf

Role para baixo até a seção * Recursos de Segurança (dentro da seção [mysqld]) e adicione uma linha com a palavra ssl a ela:

| | [...] # * Recursos de Segurança # # Leia o manual também, se você quiser chroot! # chroot = /var/lib/mysql/ # # Para gerar certificados SSL, recomendo a GUI OpenSSL "tinyca". ssl # ssl-ca=/etc/mysql/cacert.pem # ssl-cert=/etc/mysql/server-cert.pem # ssl-key=/etc/mysql/server-key.pem [...] | |

Reinicie o MySQL…

/etc/init.d/mysql restart

… e verifique novamente se o SSL agora está habilitado:

mysql -u root -p
show variables like '%ssl%';

A saída deve ser a seguinte, o que significa que o SSL agora está habilitado:

mysql> show variables like ’%ssl%’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| have_openssl  | SIM   |
| have_ssl      | SIM   |
| ssl_ca        |       |
| ssl_capath    |       |
| ssl_cert      |       |
| ssl_cipher    |       |
| ssl_key       |       |
+—————+——-+
7 rows in set (0.00 sec)

mysql>

Digite…

quit;

… para sair do shell do MySQL.

Certifique-se de que o OpenSSL está instalado:

apt-get install openssl

Agora verifique sua versão do OpenSSL:

root@remote:~# openssl version
OpenSSL 1.0.1c 10 May 2012
root@remote:~#

Se você - como eu - tem a versão do OpenSSL 1.0.1c, os certificados gerados pelo OpenSSL causarão erros como

Sep 18 17:02:15 remote mysqld: SSL error: Unable to get private key from ‘/etc/mysql/newcerts/server-key.pem’
Sep 18 17:02:15 remote mysqld: 120918 17:02:15 [Warning] Failed to setup SSL
Sep 18 17:02:15 remote mysqld: 120918 17:02:15 [Warning] SSL error: Unable to get private key

(no /var/log/syslog em remote.example.com) e

root@local:/etc/mysql/newcerts# mysql –ssl-ca=/etc/mysql/newcerts/ca-cert.pem –ssl-cert=/etc/mysql/newcerts/client-cert.pem –ssl-key=/etc/mysql/newcerts/client-key.pem -h remote.example.com -u root -p
Digite a senha:
ERROR 2026 (HY000): SSL connection error: protocol version mismatch
root@local:/etc/mysql/newcerts#

(no local.example.com quando você tenta estabelecer uma conexão criptografada com remote.example.com), pelo menos com o MySQL 5.5; veja:

Para resolver esse problema, simplesmente construímos nosso próprio OpenSSL (isso não é necessário se a sua versão do OpenSSL for anterior a 1.0.1):

cd /tmp
wget http://www.openssl.org/source/openssl-0.9.8x.tar.gz
tar xvfz openssl-0.9.8x.tar.gz
cd openssl-0.9.8x
./config –prefix=/usr/local/openssl-0.9.8
make
make install

Depois disso, você encontrará seu novo binário do OpenSSL em /usr/local/openssl-0.9.8/bin/openssl.

Agora criamos os certificados CA, servidor e cliente que precisamos para as conexões SSL. Eu crio esses certificados no diretório /etc/mysql/newcerts, que eu tenho que criar primeiro:

mkdir /etc/mysql/newcerts && cd /etc/mysql/newcerts

Crie o certificado CA (estou usando /usr/local/openssl-0.9.8/bin/openssl aqui; se a versão do OpenSSL do seu sistema for anterior a 1.0.1, você pode simplesmente usar openssl):

/usr/local/openssl-0.9.8/bin/openssl genrsa 2048 > ca-key.pem
/usr/local/openssl-0.9.8/bin/openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem

Crie o certificado do servidor:

/usr/local/openssl-0.9.8/bin/openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem
/usr/local/openssl-0.9.8/bin/openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem

Crie o certificado do cliente:

/usr/local/openssl-0.9.8/bin/openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem
/usr/local/openssl-0.9.8/bin/openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem

A saída de…

ls -l

… deve agora parecer a seguinte:

root@remote:/etc/mysql/newcerts# ls -l
total 32
-rw-r–r– 1 root root 1346 Sep 18 17:52 ca-cert.pem
-rw-r–r– 1 root root 1679 Sep 18 17:52 ca-key.pem
-rw-r–r– 1 root root 1099 Sep 18 17:53 client-cert.pem
-rw-r–r– 1 root root 1679 Sep 18 17:53 client-key.pem
-rw-r–r– 1 root root 956 Sep 18 17:53 client-req.pem
-rw-r–r– 1 root root 1099 Sep 18 17:53 server-cert.pem
-rw-r–r– 1 root root 1679 Sep 18 17:53 server-key.pem
-rw-r–r– 1 root root 956 Sep 18 17:53 server-req.pem
root@remote:/etc/mysql/newcerts#

Agora devemos transferir ca-cert.pem, client-cert.pem e client-key.pem para o servidor MySQL local (em local.example.com); antes de fazermos isso, criamos o diretório /etc/mysql/newcerts em local.example.com:

local.example.com:

mkdir /etc/mysql/newcerts

De volta a

remote.example.com

, podemos transferir os três arquivos para

local.example.com

da seguinte forma:

remote.example.com:

scp /etc/mysql/newcerts/ca-cert.pem [email protected]:/etc/mysql/newcerts
  scp /etc/mysql/newcerts/client-cert.pem [email protected]:/etc/mysql/newcerts
  scp /etc/mysql/newcerts/client-key.pem [email protected]:/etc/mysql/newcerts

Em seguida, abra /etc/mysql/my.cnf…

vi /etc/mysql/my.cnf

… e modifique a seção * Recursos de Segurança; descomente as linhas ssl-ca, ssl-cert e ssl-key e preencha os valores corretos:

| | [...] # * Recursos de Segurança # # Leia o manual também, se você quiser chroot! # chroot = /var/lib/mysql/ # # Para gerar certificados SSL, recomendo a GUI OpenSSL "tinyca". ssl ssl-ca=/etc/mysql/newcerts/ca-cert.pem ssl-cert=/etc/mysql/newcerts/server-cert.pem ssl-key=/etc/mysql/newcerts/server-key.pem [...] | |

Reinicie o MySQL:

/etc/init.d/mysql restart

Agora faça login no MySQL novamente…

mysql -u root -p

… e verifique se o SSL está habilitado e se os certificados corretos foram carregados:

show variables like '%ssl%';

mysql> show variables like ’%ssl%’;
+—————+————————————-+
| Variable_name | Value                               |
+—————+————————————-+
| have_openssl  | SIM                                 |
| have_ssl      | SIM                                 |
| ssl_ca        | /etc/mysql/newcerts/ca-cert.pem     |
| ssl_capath    |                                     |
| ssl_cert      | /etc/mysql/newcerts/server-cert.pem |
| ssl_cipher    |                                     |
| ssl_key       | /etc/mysql/newcerts/server-key.pem  |
+—————+————————————-+
7 rows in set (0.00 sec)

mysql>

Não saia do shell do MySQL. Agora vamos criar um usuário root do MySQL que pode se conectar de local.example.com a remote.example.com e é obrigado a usar SSL:

CREATE USER ‘root’@’192.168.0.100’ IDENTIFIED BY ‘mysqlrootpassword’;
GRANT ALL PRIVILEGES ON . TO ‘root’@’192.168.0.100’ IDENTIFIED BY ‘mysqlrootpassword’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

GRANT USAGE ON *.* TO 'root'@'192.168.0.100' REQUIRE SSL;

CREATE USER ‘root’@’local.example.com’ IDENTIFIED BY ‘mysqlrootpassword’;
GRANT ALL PRIVILEGES ON . TO ‘root’@’local.example.com’ IDENTIFIED BY ‘mysqlrootpassword’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

GRANT USAGE ON *.* TO 'root'@'local.example.com' REQUIRE SSL;
FLUSH PRIVILEGES;

Agora você pode sair do shell do MySQL:

quit;

É isso - agora temos um usuário root do MySQL que pode se conectar de local.example.com a remote.example.com, mas é obrigado a usar criptografia SSL.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.