Pesquisa de site

Como configurar HTTPS (certificados SSL) para proteger o login do PhpMyAdmin


Para apresentar esta dica, vamos farejar o tráfego HTTP entre uma máquina cliente e o servidor Debian 8 onde cometemos o erro inocente de fazer login usando as credenciais do usuário root do banco de dados em nosso último artigo em: Alterar e Proteger URL de login padrão do PhpMyAdmin

Como mencionamos na dica anterior, não tente fazer isso ainda se não quiser expor suas credenciais. Para começar a detectar o tráfego, digitamos o seguinte comando e pressionamos Enter:

tcpdump port http -l -A | egrep -i 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user ' --line-buffered -B20

Não demorará muito para percebermos que o nome de usuário e a senha foram enviados em formato de texto simples, como você pode ver na saída truncada do tcpdump no imagem abaixo.

Observe que ocultamos parte da senha root com uma marca azul sobre ela:

Para evitar isso, vamos proteger a página de login com um certificado. Para fazer isso, instale o pacote mod_ssl em distribuições baseadas em CentOS.

yum install mod_ssl

Embora usaremos o caminho e os nomes Debian/Ubuntu, o mesmo procedimento é válido para CentOS e RHEL se você substituir os comandos e caminhos abaixo com os equivalentes do CentOS.

Crie um diretório para armazenar a chave e o certificado:

mkdir /etc/apache2/ssl    [On Debian/Ubuntu based systems]
mkdir /etc/httpd/ssl      [On CentOS based systems]

Crie a chave e o certificado:

----------- On Debian/Ubuntu based systems ----------- 
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

----------- On CentOS based systems ----------- 
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl/apache.key -out /etc/httpd/ssl/apache.crt
Saída de amostra
........................+++
.....................................................+++
writing new private key to '/etc/httpd/ssl/apache.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:IN
State or Province Name (full name) []:Maharashtra
Locality Name (eg, city) [Default City]:Mumbai
Organization Name (eg, company) [Default Company Ltd]:TecMint
Organizational Unit Name (eg, section) []:TecMint
Common Name (eg, your name or your server's hostname) []:TecMint
Email Address []:[email 

Em seguida, verifique a chave e o certificado.

cd /etc/apache2/ssl/   [On Debian/Ubuntu based systems]
cd /etc/httpd/ssl/     [On CentOS based systems]
ls -l

total 8
-rw-r--r--. 1 root root 1424 Sep  7 15:19 apache.crt
-rw-r--r--. 1 root root 1704 Sep  7 15:19 apache.key

No Debian/Ubuntu, certifique-se de que o Apache esteja escutando na porta 443 o site padrão (/etc/apache2/sites- available/000-default.conf) e adicione as 3 linhas relacionadas ao SSL dentro da declaração VirtualHost:

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Em distribuições baseadas em CentOS, diga ao Apache para escutar na porta 443 e procure pela diretiva Listen em /etc/httpd/conf/ httpd.conf e adicione as linhas acima abaixo dele.

SSLEngine on
SSLCertificateFile /etc/httpd/ssl/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl/apache.key

Salve as alterações, carregue o módulo SSL Apache nas distribuições Debian/Ubuntu (no CentOS ele é carregado automaticamente quando você instala o mod_ssl antes):

a2enmod ssl

Force o phpmyadmin a usar SSL, certifique-se de que a seguinte linha esteja presente em /etc/phpmyadmin/config.inc.php ou / arquivo etc/phpMyAdmin/config.inc.php:

$cfg['ForceSSL'] = true;

e reinicie o servidor web:

systemctl restart apache2   [On Debian/Ubuntu based systems]
systemctl restart httpd     [On Debian/Ubuntu based systems]

Em seguida, inicie seu navegador e digite https:///my (saiba como alterar o URL de login do PhpMyAdmin) conforme mostrado abaixo.

Importante: Observe que isso apenas indica que a conexão não é segura porque estamos usando um certificado autoassinado. Clique em Avançado e confirme a exceção de segurança:

Depois de confirmar a exceção de segurança e antes de fazer login, vamos começar a detectar o tráfego HTTP e HTTPS:

tcpdump port http or port https -l -A | egrep -i 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user ' --line-buffered -B20

Em seguida, faça login usando as mesmas credenciais anteriores. O farejador de tráfego capturará, na melhor das hipóteses, apenas jargões:

Por enquanto é isso, no próximo artigo iremos compartilhar para você restringir o acesso ao PhpMyAdmin com nome de usuário/senha, até então fique atento ao Tecmint.