Linux

Apache com SSL

Como configurar o Apache com HTTPS num servidor Debian: VirtualHost para as portas 80 e 443, redirecionamento 301, certificado gratuito da Let's Encrypt, HSTS e HTTP/2.

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.

Nota: Este tutorial assume Debian 12 (ou derivado) com Apache 2.4. O meu servidor corre Apache 2.4 (Debian 13) 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 — melhora o desempenho em sites com muitos recursos (imagens, scripts, folhas de estilo). 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. Não atives o site já: o bloco :443 aponta para certificados que só existem depois do passo 5, e o Apache não arranca com ficheiros em falta. A ativação fica para o passo 6.

# 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 quando o certificado se aproxima do fim (nas versões recentes do Certbot, quando falta cerca de um terço da validade). 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 ligaçã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 ligaçã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 bom desempenho.

Recursos

Partilhar

Comentários 0

Ainda sem comentários — sê o primeiro.