15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar
30.10.2024

Como Configurar um Certificado SSL no Nginx: Um Guia Completo Passo a Passo

Proteger o seu website com um certificado SSL/TLS já não é opcional — é um requisito fundamental para a confiança dos utilizadores, proteção de dados e classificações nos motores de busca. O Google utiliza explicitamente o HTTPS como sinal de classificação desde 2014, e os navegadores modernos alertam ativamente os visitantes quando um site não tem encriptação. Se estiver a utilizar o Nginx como servidor web, este guia irá orientá-lo em tudo o que precisa de saber para instalar, configurar e automatizar a gestão de certificados SSL utilizando o Certbot e o Let’s Encrypt.

Quer esteja a gerir um ambiente de VPS Hosting, um servidor dedicado ou um plano de alojamento partilhado, um SSL corretamente configurado é inegociável para qualquer website em produção.

O Que É um Certificado SSL e Por Que o Nginx Precisa de Um?

Um certificado SSL (Secure Sockets Layer) — mais corretamente referido hoje em dia como certificado TLS (Transport Layer Security) — estabelece uma ligação encriptada entre o seu servidor web e o navegador de um visitante. Esta encriptação garante que dados sensíveis, como credenciais de acesso, informações de pagamento e dados pessoais, não possam ser intercetados por terceiros maliciosos.

Para o Nginx especificamente, a configuração SSL envolve:

  • Ficheiros de certificado: A cadeia de certificados públicos emitida por uma Autoridade de Certificação (CA)
  • Chave privada: Uma chave gerada criptograficamente armazenada de forma segura no seu servidor
  • Diretivas de bloco de servidor: Instruções de configuração do Nginx que vinculam o certificado ao seu domínio

Sem SSL, o seu site é servido via HTTP, o que significa que todo o tráfego é transmitido em texto simples. Com SSL corretamente configurado, o seu site utiliza HTTPS — encriptado, autenticado e confiável por navegadores e motores de busca.

> Dica profissional: Se estiver a avaliar opções de alojamento, a AlexHost oferece Certificados SSL para domínios de todos os tipos, incluindo certificados de Validação de Domínio (DV), Validação de Organização (OV) e Validação Estendida (EV).

Pré-requisitos Antes de Começar

Antes de mergulhar nos passos de configuração, certifique-se de que as seguintes condições estão cumpridas:

  • Um servidor web Nginx em execução num sistema baseado em Linux (Ubuntu 20.04/22.04 ou Debian recomendado)
  • Acesso root ou sudo ao seu servidor
  • Um nome de domínio registado apontando para o endereço IP do seu servidor através de registos DNS A — pode registar um através do Registo de Domínios
  • Portas de firewall abertas: As portas TCP 80 (HTTP) e 443 (HTTPS) devem estar acessíveis
  • Um utilizador não-root com privilégios sudo (melhor prática para segurança do servidor)

Pode verificar se o Nginx está em execução com:

sudo systemctl status nginx

E confirmar que o seu domínio resolve corretamente usando:

dig yourdomain.com +short

Passo 1: Instalar o Certbot no Seu Servidor

O Certbot é o cliente oficial de código aberto para o Let’s Encrypt — uma Autoridade de Certificação gratuita, automatizada e amplamente confiável. Ele trata de todo o processo de emissão de certificados, incluindo a validação de domínio e as atualizações de configuração do Nginx.

Atualizar o Índice de Pacotes

Comece sempre por atualizar as suas listas de pacotes para garantir que está a instalar as versões mais recentes disponíveis:

sudo apt update && sudo apt upgrade -y

Instalar o Certbot e o Plugin do Nginx

O plugin python3-certbot-nginx permite ao Certbot ler e modificar diretamente os seus ficheiros de configuração do Nginx, automatizando grande parte do processo de configuração:

sudo apt install certbot python3-certbot-nginx -y

Verificar a Instalação

Confirme que o Certbot foi instalado com sucesso verificando a sua versão:

certbot --version

Deverá ver uma saída semelhante a certbot 2.x.x.

Passo 2: Permitir Tráfego HTTPS Através da Sua Firewall

Se estiver a utilizar UFW (Uncomplicated Firewall), precisa de permitir explicitamente o tráfego HTTPS antes de continuar:

sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
sudo ufw status

O perfil Nginx Full permite tanto HTTP (porta 80) como HTTPS (porta 443). Remover a regra HTTP independente garante que, uma vez configurado o SSL, não está a deixar portas desnecessárias abertas sem propósito.

Passo 3: Obter o Seu Certificado SSL do Let’s Encrypt

Com o Certbot instalado e a sua firewall configurada, pode agora solicitar um certificado. O sinalizador --nginx indica ao Certbot para utilizar o plugin do Nginx, que trata automaticamente da verificação do desafio ACME e atualiza a configuração do seu servidor.

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

O Que Acontece Durante Este Processo?

  1. Verificação de propriedade do domínio: O Certbot modifica temporariamente a sua configuração do Nginx para servir um ficheiro de desafio, provando ao Let’s Encrypt que controla o domínio
  2. Emissão do certificado: O Let’s Encrypt emite um certificado assinado válido por 90 dias
  3. Configuração automática do Nginx: O Certbot atualiza o bloco de servidor do Nginx para utilizar os novos ficheiros de certificado

Prompts Interativos

Durante o processo, o Certbot irá solicitar:

  • Um endereço de e-mail para avisos urgentes de renovação e segurança
  • Concordância com os Termos de Serviço
  • Se deve redirecionar HTTP para HTTPS — escolha sempre a opção 2 (Redirecionar) para impor HTTPS em todo o site

Os seus certificados serão armazenados em:

/etc/letsencrypt/live/yourdomain.com/

Os ficheiros principais são:

FicheiroFinalidade
fullchain.pemO seu certificado + cadeia intermédia
privkey.pemA sua chave privada (mantenha em segredo)
cert.pemApenas o certificado do seu domínio
chain.pemApenas certificados intermédios

Passo 4: Configurar Manualmente o Nginx para SSL (Avançado)

Embora o Certbot automatize a maior parte da configuração, compreender a configuração manual dá-lhe controlo total sobre a sua implementação SSL — essencial para ajuste de desempenho, reforço de segurança e implementações personalizadas.

Abrir a Configuração do Bloco de Servidor do Nginx

sudo nano /etc/nginx/sites-available/yourdomain.com

Se estiver a utilizar o ficheiro de configuração predefinido:

sudo nano /etc/nginx/sites-available/default

Configuração Completa do Bloco de Servidor SSL

Substitua ou atualize a sua configuração com o seguinte exemplo reforçado:

# Redirect all HTTP traffic to HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri;
}

# HTTPS server block
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name yourdomain.com www.yourdomain.com;

    # SSL Certificate Paths
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    # Recommended SSL parameters
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    # Security Headers
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header Referrer-Policy "no-referrer-when-downgrade";

    # Document root and index
    root /var/www/yourdomain.com/html;
    index index.html index.htm index.nginx-debian.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Diretivas de Configuração Principais Explicadas

  • ssl_protocols TLSv1.2 TLSv1.3: Desativa protocolos mais antigos e vulneráveis (SSLv3, TLS 1.0, TLS 1.1)
  • ssl_ciphers: Especifica um conjunto de cifras forte com prioridade para sigilo futuro
  • ssl_stapling on: Ativa o OCSP stapling, reduzindo a latência do handshake SSL
  • Strict-Transport-Security: Instrui os navegadores a utilizar sempre HTTPS para o seu domínio (HSTS)
  • http2: Ativa HTTP/2 para melhor desempenho em ligações HTTPS

Passo 5: Testar a Sua Configuração do Nginx

Antes de reiniciar o Nginx, valide sempre a sintaxe da sua configuração para detetar erros que possam colocar o seu site offline:

sudo nginx -t

Um teste bem-sucedido retorna:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Se encontrar erros, reveja cuidadosamente a saída — o Nginx indicará o ficheiro e o número de linha onde o problema existe.

Passo 6: Reiniciar o Nginx para Aplicar as Alterações

Assim que o teste de configuração passar, recarregue ou reinicie o Nginx:

# Graceful reload (preferred for production — no downtime)
sudo systemctl reload nginx

# Full restart (use if reload doesn't apply all changes)
sudo systemctl restart nginx

Verifique se o Nginx está a funcionar corretamente após o reinício:

sudo systemctl status nginx

Passo 7: Configurar a Renovação Automática do Certificado SSL

Os certificados Let’s Encrypt expiram após 90 dias. Este curto período de validade é intencional — limita os danos causados por certificados comprometidos e incentiva a automatização. O Certbot instala automaticamente um temporizador systemd (ou tarefa cron) para tratar das renovações, mas deve verificar e testá-lo.

Verificar o Temporizador de Renovação Existente

sudo systemctl status certbot.timer

Deverá ver que o temporizador está ativo e agendado para ser executado duas vezes por dia.

Testar o Processo de Renovação

Simule uma renovação sem modificar efetivamente nenhum certificado:

sudo certbot renew --dry-run

A saída bem-sucedida incluirá:

Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/yourdomain.com/fullchain.pem (success)

Adicionar um Hook Pós-Renovação para Recarregar o Nginx

O Certbot não recarregará automaticamente o Nginx após renovar os certificados, a menos que configure um hook de implementação. Crie um com:

sudo nano /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

Adicione o seguinte conteúdo:

#!/bin/bash
systemctl reload nginx

Torne-o executável:

sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

Isto garante que o Nginx carrega os ficheiros de certificado atualizados imediatamente após cada renovação bem-sucedida.

Passo 8: Verificar a Sua Instalação SSL

Após concluir a configuração, verifique a sua configuração SSL utilizando estes métodos:

Verificação no Navegador

Navegue para https://yourdomain.com no seu navegador. Deverá ver um ícone de cadeado na barra de endereço indicando uma ligação segura.

Ferramentas de Teste SSL Online

Utilize estas ferramentas gratuitas para auditar a qualidade da sua configuração SSL:

  • SSL Labs (Qualys): https://www.ssllabs.com/ssltest/ — Fornece uma classificação por letras (procure A ou A+)
  • Security Headers: https://securityheaders.com/ — Audita os seus cabeçalhos de segurança HTTP
  • HSTS Preload: https://hstspreload.org/ — Verifica a elegibilidade para pré-carregamento HSTS

Verificação por Linha de Comandos

# Check certificate details
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com

# Check certificate expiry date
echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates

Resolução de Problemas Comuns de SSL no Nginx

ProblemaCausa ProvávelSolução
ERR_SSL_PROTOCOL_ERRORNginx não está a escutar na porta 443Verifique a diretiva listen 443 ssl; e as regras de firewall
NET::ERR_CERT_AUTHORITY_INVALIDUtilização de cert.pem em vez de fullchain.pemAtualize ssl_certificate para utilizar fullchain.pem
Certificado não está a renovarTemporizador do Certbot desativado ou porta 80 bloqueadaExecute sudo certbot renew --dry-run e verifique os registos
Avisos de conteúdo mistoRecursos HTTP carregados numa página HTTPSAtualize todos os links internos e URLs de recursos para HTTPS
SSL_ERROR_RX_RECORD_TOO_LONGTráfego HTTP a atingir a porta HTTPSCertifique-se de que o redirecionamento da porta 80 para 443 está configurado

Escolher o Ambiente de Alojamento Certo para SSL

O desempenho e a fiabilidade da sua implementação SSL dependem muito do seu ambiente de alojamento. Aqui está uma visão geral rápida:

  • VPS Hosting: O acesso root completo dá-lhe controlo total sobre a configuração do Nginx, parâmetros SSL e gestão de certificados — ideal para este guia
  • Servidores Dedicados: Desempenho máximo e isolamento para sites de alto tráfego que requerem configurações SSL de nível empresarial
  • Alojamento Web Partilhado: O SSL é normalmente gerido através de um painel de controlo; a configuração manual do Certbot pode não estar disponível
  • VPS com cPanel: Simplifica a gestão de SSL através de uma interface gráfica, mantendo o controlo ao nível do VPS

Para programadores e administradores de sistemas que precisam de controlo total sobre a sua pilha SSL, um VPS ou servidor dedicado é a escolha recomendada.

Conclusão

Configurar SSL no Nginx é um processo de múltiplos passos, mas cada passo serve um propósito crítico — desde encriptar o tráfego e verificar a propriedade do domínio até reforçar a configuração de cifras e automatizar as renovações. Ao seguir este guia, implementou:

✅ Um certificado SSL gratuito e confiável via Let’s Encrypt e Certbot

✅ Uma configuração SSL do Nginx reforçada com protocolos TLS modernos

✅ Redirecionamento de HTTP para HTTPS para todo o tráfego

✅ OCSP stapling para melhor desempenho do handshake

✅ HSTS e cabeçalhos de segurança para defesa em profundidade

✅ Renovação automática de certificados com hooks de recarga do Nginx

Um certificado SSL corretamente configurado não protege apenas os seus utilizadores — constrói confiança, melhora as suas classificações SEO e é um requisito base para qualquer presença web profissional. Se estiver à procura de infraestrutura fiável para alojar o seu servidor Nginx protegido por SSL, explore os planos de VPS Hosting da AlexHost, criados especificamente para programadores e empresas que levam a segurança a sério.

15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar