Todos os guias de implantacao Implantacao

Como Instalar um Certificado SSL no Apache

Este guia orienta você na instalação de um certificado SSL no Apache HTTP Server usando mod_ssl — desde o upload dos arquivos até configurações TLS reforçadas e solução de erros comuns. Funciona com certificados do GetHTTPS, Certbot ou qualquer CA.

Se você ainda não tem um certificado, obtenha um gratuitamente em 5 minutos.

Pré-requisitos

  • Apache 2.4+ instalado e servindo seu site em HTTP (porta 80)
  • Acesso root/sudo ao servidor
  • Arquivos do certificado — o Apache precisa de três arquivos separados:

Por que três arquivos? Diferente do Nginx (que usa um único fullchain.pem), o Apache tradicionalmente espera o certificado e a cadeia como arquivos separados. O Apache 2.4.8+ pode usar fullchain.pem em SSLCertificateFile e pular SSLCertificateChainFile. Detalhes de formato →

Passo 1: Fazer upload dos arquivos do certificado

# Criar um diretório seguro
sudo mkdir -p /etc/ssl/gethttps

# Copiar os arquivos para o servidor
sudo cp cert.pem chain.pem privkey.pem /etc/ssl/gethttps/

# Proteger a chave privada
sudo chmod 600 /etc/ssl/gethttps/privkey.pem
sudo chmod 644 /etc/ssl/gethttps/cert.pem /etc/ssl/gethttps/chain.pem
sudo chown root:root /etc/ssl/gethttps/*

Se estiver transferindo via SCP:

scp cert.pem chain.pem privkey.pem user@your-server:/tmp/
# No servidor:
sudo mv /tmp/{cert,chain,privkey}.pem /etc/ssl/gethttps/

Passo 2: Habilitar os módulos necessários do Apache

# Debian/Ubuntu
sudo a2enmod ssl        # Módulo SSL principal
sudo a2enmod headers    # Para HSTS e cabeçalhos de segurança
sudo a2enmod rewrite    # Para redirecionamento HTTP→HTTPS (se usar .htaccess)
sudo systemctl restart apache2

# CentOS/RHEL/Amazon Linux
sudo yum install mod_ssl    # Geralmente instala e habilita em um passo
sudo systemctl restart httpd

Verificar se o mod_ssl está carregado:

apachectl -M | grep ssl
# Esperado: ssl_module (shared)

Passo 3: Configurar o VirtualHost HTTPS

Crie ou edite a configuração SSL do seu site. No Debian/Ubuntu, isso normalmente fica em /etc/apache2/sites-available/yourdomain-ssl.conf:

# ─── Servidor HTTPS ────────────────────────────
<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com

    # Arquivos do certificado
    SSLEngine on
    SSLCertificateFile      /etc/ssl/gethttps/cert.pem
    SSLCertificateKeyFile   /etc/ssl/gethttps/privkey.pem
    SSLCertificateChainFile /etc/ssl/gethttps/chain.pem

    # Protocolo TLS — apenas 1.2 e 1.3
    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    SSLHonorCipherOrder off
    SSLCompression off

    # OCSP stapling (verificação de certificado mais rápida para clientes)
    SSLUseStapling on
    SSLStaplingCache "shmcb:/var/run/apache2/ssl_stapling(128000)"

    # Cabeçalhos de segurança
    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-Frame-Options "SAMEORIGIN"

    # Seu site
    DocumentRoot /var/www/html
    <Directory /var/www/html>
        AllowOverride All
    </Directory>
</VirtualHost>

# ─── Redirecionamento HTTP ───────────────────────────
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    Redirect permanent / https://example.com/
</VirtualHost>

O que cada diretiva faz:

DiretivaFinalidade
SSLEngine onHabilita SSL/TLS para este VirtualHost
SSLCertificateFileCaminho para o seu certificado
SSLCertificateKeyFileCaminho para a sua chave privada
SSLCertificateChainFileCaminho para o certificado CA intermediário
SSLProtocolApenas TLS 1.2/1.3 — versões antigas descontinuadas
SSLHonorCipherOrder offPermite que o cliente escolha o melhor cipher
SSLCompression offPrevine ataque CRIME
SSLUseStaplingO servidor busca antecipadamente a resposta OCSP
Strict-Transport-SecurityHSTS — navegadores lembram de sempre usar HTTPS
Redirect permanentRedirecionamento 301 HTTP → HTTPS

Passo 4: Habilitar o site e testar

# Debian/Ubuntu
sudo a2ensite yourdomain-ssl.conf
sudo apachectl configtest          # Deve dizer "Syntax OK"
sudo systemctl reload apache2

# CentOS/RHEL
sudo apachectl configtest
sudo systemctl reload httpd

Se o configtest reportar um erro, ele informa a linha exata — corrija antes de recarregar.

Passo 5: Verificar

Navegador: Visite https://yourdomain.com. Clique no cadeado → verifique “Let’s Encrypt” como emissor.

Linha de comando:

echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates

Online: Use o SSL Labs Server Test para uma avaliação abrangente. Meta: A ou A+.

Apache vs Nginx: diferenças nos arquivos de certificado

ApacheNginx
CertificadoSSLCertificateFile cert.pemssl_certificate fullchain.pem
Chave privadaSSLCertificateKeyFile privkey.pemssl_certificate_key privkey.pem
CadeiaSSLCertificateChainFile chain.pemIncluída em fullchain.pem
Arquivos necessários3 arquivos separados2 arquivos (cadeia combinada)

O Apache 2.4.8+ também pode usar o fullchain.pem combinado em SSLCertificateFile — nesse caso, você pode omitir SSLCertificateChainFile.

Renovação

Quando seu certificado estiver próximo do vencimento (verifique aqui):

# Substituir os arquivos
sudo cp new-cert.pem /etc/ssl/gethttps/cert.pem
sudo cp new-chain.pem /etc/ssl/gethttps/chain.pem
sudo cp new-privkey.pem /etc/ssl/gethttps/privkey.pem

# Recarregar (não reiniciar) — zero tempo de inatividade
sudo systemctl reload apache2    # Debian/Ubuntu
sudo systemctl reload httpd      # CentOS/RHEL

Guia completo de renovação → | Automatizar com Certbot →

Solução de problemas

”AH02572: Failed to configure certificate” / chave incompatível

O certificado e a chave privada não correspondem. Verifique se eles combinam:

# Esses dois hashes devem ser idênticos
openssl x509 -noout -modulus -in /etc/ssl/gethttps/cert.pem | md5sum
openssl rsa -noout -modulus -in /etc/ssl/gethttps/privkey.pem | md5sum

Se forem diferentes, você está usando arquivos de sessões diferentes do GetHTTPS. Baixe ambos novamente da mesma sessão.

”AH01909: server certificate does NOT include an ID”

Seu ServerName não corresponde a nenhum domínio no campo SAN do certificado:

openssl x509 -noout -text -in /etc/ssl/gethttps/cert.pem | grep -A1 "Subject Alternative Name"

Certifique-se de que o ServerName do Apache corresponda exatamente a um dos nomes DNS listados.

Cadeia intermediária ausente. Verifique se SSLCertificateChainFile aponta para chain.pem (o intermediário), não para cert.pem. Teste a cadeia:

echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | grep "Verify return code"
# "Verify return code: 0 (ok)" = bom
# "Verify return code: 21 (unable to verify)" = cadeia incompleta

“AH00526: Syntax error on line X”

Erro de sintaxe na configuração do Apache. Causas comuns:

  • Tag </VirtualHost> de fechamento ausente
  • SSLCertificateChainFile escrito incorretamente
  • Aspas ausentes em valores de cabeçalhos
  • Caminho do arquivo não existe

HTTPS funciona mas mostra “Não Seguro”

Conteúdo misto — sua página carrega recursos via HTTP. Abra DevTools → Console → corrija as URLs com http://.

Perguntas frequentes

Posso usar fullchain.pem em vez de cert + chain separados?

Sim, no Apache 2.4.8+. Use SSLCertificateFile /path/to/fullchain.pem e remova a diretiva SSLCertificateChainFile completamente. Em versões mais antigas do Apache, você precisa de arquivos separados.

Como verificar qual versão do Apache eu tenho?

apachectl -v
# ou
httpd -v

Preciso reiniciar o Apache ou apenas recarregar?

Recarregar (systemctl reload) é suficiente e causa zero tempo de inatividade. Reiniciar (systemctl restart) interrompe todas as conexões ativas. Sempre recarregue para alterações de certificado.

O Apache pode servir certificados diferentes para domínios diferentes?

Sim. Crie blocos <VirtualHost *:443> separados com diferentes ServerName e diretivas SSLCertificate*. O Apache usa SNI (Server Name Indication) para selecionar o certificado correto.

O Apache suporta certificados ECDSA?

Sim. O Apache 2.4+ lida com ECDSA da mesma forma que RSA — mesmas diretivas, mesmo formato de arquivo. O GetHTTPS gera ECDSA P-256 por padrão.

Onde estão os logs de erro SSL do Apache?

# Debian/Ubuntu
tail -f /var/log/apache2/error.log

# CentOS/RHEL
tail -f /var/log/httpd/ssl_error_log

Artigos relacionados

Primeiros passos 2026-05-08
Como obter um certificado SSL gratuito (guia passo a passo)
Obtenha um certificado SSL gratuito do Let's Encrypt em 5 minutos — sem software para instalar, sem conta para criar. Guia completo cobrindo 4 métodos, ambos os tipos de desafio, instalação em 6 plataformas e solução de problemas.
Implantacao 2026-05-07
Como Redirecionar HTTP para HTTPS
Force todo o tráfego para HTTPS com redirecionamentos no lado do servidor. Exemplos de configuração para Nginx, Apache e .htaccess com redirecionamentos permanentes 301.
Implantacao 2026-05-08
Como Instalar um Certificado SSL no Nginx
Guia passo a passo para instalar um certificado SSL no Nginx. Abrange upload de arquivos, configuração completa do bloco server, boas práticas de TLS, HTTP/2, HSTS, configuração de redirecionamento, testes e solução de 6 erros comuns.
Implantacao 2026-05-07
Como Corrigir Avisos de Conteúdo Misto
Conteúdo misto ocorre quando uma página HTTPS carrega recursos via HTTP. Saiba como encontrar e corrigir erros de conteúdo misto para obter um ícone de cadeado limpo.
Obtenha um certificado SSL gratuito no seu navegador
Sem instalacao, sem conta. Sua chave privada nunca sai do seu dispositivo.
Obter seu certificado