Vamos configurar um servidor Apache para servir um site com HTTPS, desde o VirtualHost básico até cifras seguras e HTTP/2. Se já tens um domínio apontado para o servidor, este tutorial é para ti.

O que vais aprender:

  • Configurar um VirtualHost para HTTP e HTTPS
  • Redirecionamento forçado (301) de HTTP para HTTPS
  • Obter certificados SSL grátis com Let's Encrypt
  • Boas práticas de segurança: cipher suites, HSTS, HTTP/2
  • Verificar que está tudo bem (e manter-se assim)

Nota: Este tutorial assume Debian 12 (ou derivado) com Apache 2.4. O meu servidor corre Apache/2.4.67 com os módulos ssl, rewrite, proxy, headers e http2 ativos.


1. ativar os módulos necessários

Antes de tudo, garante que o Apache tem os módulos certos ligados:

sudo a2enmod ssl
sudo a2enmod rewrite
sudo a2enmod headers
sudo a2enmod http2
sudo systemctl restart apache2
Copy

Dica: O módulo http2 é opcional mas recomendado: traz performance extra em sites com muitos assets. O headers é necessário para o HSTS.

2. como funciona o redirect HTTP → HTTPS

Antes de escrevermos configuração, vale a pena perceber o fluxo:

Fluxo HTTP para HTTPS com redirect 301

⬆ O browser tenta HTTP → Apache responde com 301 → Browser refaz pedido com HTTPS → Apache serve conteúdo seguro

3. configuração do virtualhost

Cria o ficheiro de configuração:

sudo nano /etc/apache2/sites-available/dominio.exemplo.pt.conf
Copy

Estrutura do VirtualHost Apache com SSL

⬆ Estrutura do ficheiro de configuração com VirtualHost para portas 80 e 443

Agora, cola o seguinte conteúdo e ajusta o domínio:

# HTTP — só faz redirect para HTTPS
<VirtualHost *:80>
    ServerName dominio.exemplo.pt
    Redirect permanent / https://dominio.exemplo.pt/
</VirtualHost>

# HTTPS — o site a sério
<VirtualHost *:443>
    ServerName dominio.exemplo.pt
    DocumentRoot /var/www/dominio.exemplo.pt

    <Directory /var/www/dominio.exemplo.pt>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    # SSL
    SSLEngine on
    SSLCertificateFile      /etc/letsencrypt/live/dominio.exemplo.pt/fullchain.pem
    SSLCertificateKeyFile   /etc/letsencrypt/live/dominio.exemplo.pt/privkey.pem

    # Protocolos seguros — desativar o lixo antigo
    SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
    SSLHonorCipherOrder     on
    SSLCompression          off

    # HTTP/2 (se o módulo estiver ativo)
    Protocols h2 http/1.1

    # HSTS — força HTTPS nos browsers
    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

    # Logs separados
    ErrorLog  ${APACHE_LOG_DIR}/dominio.exemplo.pt_error.log
    CustomLog ${APACHE_LOG_DIR}/dominio.exemplo.pt_access.log combined
</VirtualHost>
Copy

Atenção: O HSTS com preload é um compromisso sério. Se um dia precisares de voltar atrás, vais ter de esperar que o teu domínio saia da lista de preload. Usa max-age=31536000 (1 ano) se quiseres ser mais conservador.

4. criar o diretório do site

sudo mkdir -p /var/www/dominio.exemplo.pt
sudo chown -R www-data:www-data /var/www/dominio.exemplo.pt
sudo chmod -R 755 /var/www/dominio.exemplo.pt
Copy

5. obter certificado SSL com let's encrypt

Este é o passo que torna tudo possível sem gastar dinheiro. Vê como o processo funciona:

Fluxo Let's Encrypt - obtenção de certificado SSL

⬆ Como o Certbot + Let's Encrypt emitem e renovam certificados automaticamente

sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d dominio.exemplo.pt
Copy

O Certbot faz o seguinte automaticamente:

  1. Contacta o servidor Let's Encrypt
  2. Verifica que és dono do domínio (coloca um ficheiro no teu servidor)
  3. Gera os certificados
  4. Atualiza a configuração do Apache
  5. Configura a renovação automática (via systemd timer)

Para verificar se a renovação automática está ativa:

systemctl list-timers | grep certbot
Copy

Nota: Os certificados Let's Encrypt duram 90 dias. O certbot.timer corre duas vezes por dia e renova automaticamente se faltarem menos de 30 dias. Não tens de fazer nada.

6. ativar o site e testar

# Ativar o site
sudo a2ensite dominio.exemplo.pt.conf

# Testar a configuração
sudo apachectl configtest

# Se tudo ok, reiniciar
sudo systemctl restart apache2
Copy

Agora testa com o browser:

  • http://dominio.exemplo.pt → deve redirecionar para https://
  • https://dominio.exemplo.pt → deve mostrar o conteúdo do site

Podes também testar com openssl para veres os detalhes da conexão:

openssl s_client -connect dominio.exemplo.pt:443 -servername dominio.exemplo.pt
Copy

7. o que acontece durante o SSL handshake

Quando o browser faz HTTPS, antes de qualquer dado ser transferido, ocorre o SSL/TLS Handshake: é a dança entre cliente e servidor para estabelecer uma conexão segura:

SSL/TLS Handshake simplificado

⬆ As 5 fases do SSL Handshake: do ClientHello à conexão segura

8. verificação externa (recomendado)

Navega até https://www.ssllabs.com/ssltest/ e insere o teu domínio. Com esta configuração deves obter A ou A+ (se ativaste HSTS).

9. firewall? não te esqueças

Se tiveres um firewall ativo (UFW, iptables, nftables), garante que as portas 80 e 443 estão abertas:

# Se usas UFW
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Se usas iptables
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Copy

Recapitulando

  • Ativámos os módulos necessários (ssl, headers, http2)
  • Configurámos VirtualHost com redirect 301 e SSL reforçado
  • Criámos o diretório com permissões corretas
  • Obtivemos certificado grátis com Let's Encrypt
  • Ativámos HSTS e HTTP/2
  • Testámos e verificámos com ferramentas externas

O teu servidor Apache está agora a servir conteúdo de forma segura, com boas práticas de segurança e performance.

Recursos

Comentários (0)

Nenhum comentário ainda. Seja o primeiro!

Deixar comentário