Poupe 15% em todos os serviços de alojamento

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código: Skills Começar a trabalhar
Secções
Linux Segurança

Como Proteger Nginx com Let’s Encrypt SSL no Ubuntu (Guia Completo 2025)

HTTPS já não é opcional. Em 2025, todos os websites precisam de encriptação SSL/TLS — não apenas para proteger dados de utilizadores, mas para classificar competitivamente no Google Search e satisfazer requisitos de segurança modernos do navegador. Let’s Encrypt torna isto alcançável gratuitamente, oferecendo certificados SSL confiáveis e auto-renováveis que funcionam perfeitamente com Nginx no Ubuntu.

Este guia abrangente orienta-o através de cada passo: instalar Certbot, obter um certificado SSL Let’s Encrypt, verificar a sua configuração e automatizar renovações — tudo num servidor Ubuntu 18.04, 20.04 ou 22.04 a executar Nginx.

Quer esteja a gerir um ambiente VPS Hosting ou um servidor web dedicado, este tutorial oferece-lhe uma configuração HTTPS pronta para produção em menos de 15 minutos.

Por que SSL é importante para Nginx em 2025

Antes de mergulhar nos comandos, vale a pena entender exatamente o que você ganha ao proteger Nginx com Let's Encrypt:

  • Criptografia de dados: HTTPS criptografa todo o tráfego entre seu servidor e visitantes, prevenindo ataques man-in-the-middle e escuta.
  • Sinais de classificação SEO: Google confirmou HTTPS como um fator de classificação. Sites sem SSL são ativamente penalizados nos resultados de busca.
  • Indicadores de confiança do navegador: Chrome, Firefox e Edge exibem avisos “Não seguro” para sites HTTP, destruindo a confiança do usuário e aumentando as taxas de rejeição.
  • Gratuito e automatizado: Let's Encrypt emite certificados sem custo, e Certbot lida com renovações automaticamente — eliminando a sobrecarga manual de certificados pagos.
  • PCI DSS e conformidade: Qualquer site que lida com pagamentos ou dados pessoais é legalmente obrigado a usar conexões criptografadas.

Se seu domínio já está registrado e apontando para seu servidor, você está pronto para começar. Se você ainda precisa de um domínio, AlexHost oferece Registro de Domínio acessível com gerenciamento DNS instantâneo.

Pré-requisitos

Certifique-se de que as seguintes condições são atendidas antes de prosseguir:

RequisitoDetalhes
Sistema OperacionalUbuntu 18.04, 20.04, ou 22.04 LTS
Servidor WebNginx instalado e servindo ativamente seu site
Nome de DomínioUm domínio registado com um registo A apontando para o IP público do seu servidor
Acesso ao ServidorAcesso SSH com um utilizador que tenha privilégios sudo
FirewallPortas 80 (HTTP) e 443 (HTTPS) abertas em UFW ou iptables
Acesso RootNão é estritamente necessário, mas o acesso sudo é obrigatório

Verificar se Nginx Está em Execução

Antes de instalar Certbot, confirme que Nginx está ativo:

sudo systemctl status nginx

Deverá ver active (running) na saída. Se Nginx não estiver instalado, execute:

sudo apt update && sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx

Abrir Portas Firewall Necessárias

Se UFW estiver ativado, permita tráfego HTTP e HTTPS:

sudo ufw allow 'Nginx Full'
sudo ufw reload
sudo ufw status

A saída deverá mostrar Nginx Full como ALLOW para IPv4 e IPv6.

Passo 1 — Instalação do Certbot e do Plugin Nginx

Certbot é o cliente oficial do Let’s Encrypt. Automatiza todo o ciclo de vida do certificado: emissão, instalação e renovação. O plugin python3-certbot-nginx permite que o Certbot leia sua configuração Nginx e a modifique automaticamente.

Atualize o Índice de Pacotes

Sempre atualize suas listas de pacotes antes de instalar novo software:

sudo apt update
sudo apt upgrade -y

Instale o Certbot com o Plugin Nginx

sudo apt install certbot python3-certbot-nginx -y

Verifique a Instalação

certbot --version

Saída esperada (a versão pode variar):

certbot 2.x.x

> Nota para usuários do Ubuntu 18.04: Se a versão padrão do APT do Certbot estiver desatualizada, instale via Snap para a versão mais recente:

> “`bash

> sudo snap install –classic certbot

> sudo ln -s /snap/bin/certbot /usr/bin/certbot

> “`

Passo 2 — Configurar o Seu Bloco de Servidor Nginx

Certbot precisa detectar o seu domínio na configuração do Nginx para modificá-lo automaticamente. Se ainda não criou um bloco de servidor para o seu domínio, faça-o agora.

Criar um Bloco de Servidor

Substitua yourdomain.com pelo seu nome de domínio real em todo este guia:

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

Adicione a seguinte configuração básica:

server {
    listen 80;
    listen [::]:80;

    server_name yourdomain.com www.yourdomain.com;

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

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

Ativar o Bloco de Servidor

sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/

Testar a Configuração do Nginx

Sempre valide a sua configuração do Nginx antes de recarregar:

sudo nginx -t

Resultado esperado:

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

Recarregar Nginx

sudo systemctl reload nginx

Passo 3 — Obtenção de um Certificado SSL Let's Encrypt

Com Nginx configurado e Certbot instalado, pode agora solicitar o seu certificado SSL.

Executar Certbot com o Plugin Nginx

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

Desagregação das flags:

    --nginx — Diz ao Certbot para usar o plugin Nginx para configuração automática
    -d yourdomain.com — Especifica o domínio primário
    -d www.yourdomain.com — Adiciona o subdomínio www ao mesmo certificado (Subject Alternative Name)
    
    Avisos Interativos Explicados
    Certbot guiá-lo-á através de um breve assistente de configuração:
    1. Endereço de Email
    Enter email address (used for urgent renewal and security notices):
    Forneça um email válido. Let's Encrypt usa isto para o notificar sobre certificados que expiram e problemas de segurança.
    2. Termos de Serviço
    Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf
    (A)gree/(C)ancel:
    Digite A e prima Enter.
    3. Newsletter EFF (Opcional)
    Would you be willing to share your email address with the Electronic Frontier Foundation?
    (Y)es/(N)o:
    Isto é opcional. Digite N se preferir não subscrever.
    4. Redirecionamento de HTTP para HTTPS
    Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
    1: No redirect
    2: Redirect - Make all requests redirect to secure HTTPS access
    Escolha sempre a opção 2. Isto garante que todos os visitantes são automaticamente atualizados para HTTPS, eliminando problemas de conteúdo misto e melhorando a postura de segurança.
    Resultado Bem-sucedido
    Se tudo estiver configurado corretamente, verá:
    Successfully received certificate.
    Certificate is saved at: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
    Key is saved at:         /etc/letsencrypt/live/yourdomain.com/privkey.pem
    This certificate expires on YYYY-MM-DD.
    These files will be updated when the certificate renews.
    
    Deploying certificate
    Successfully deployed certificate for yourdomain.com to /etc/nginx/sites-available/yourdomain.com
    Successfully deployed certificate for www.yourdomain.com to /etc/nginx/sites-available/yourdomain.com
    Congratulations! You have successfully enabled HTTPS on https://yourdomain.com and https://www.yourdomain.com
    O Que Certbot Modificou no Nginx
    Após a execução, Certbot acrescenta automaticamente diretivas SSL ao seu bloco de servidor. A sua configuração terá agora um aspecto semelhante a este:
    server {
        server_name yourdomain.com www.yourdomain.com;
    
        root /var/www/yourdomain.com/html;
        index index.html index.htm;
    
        location / {
            try_files $uri $uri/ =404;
        }
    
        listen 443 ssl;
        ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    }
    
    server {
        if ($host = www.yourdomain.com) {
            return 301 https://$host$request_uri;
        }
        if ($host = yourdomain.com) {
            return 301 https://$host$request_uri;
        }
    
        listen 80;
        server_name yourdomain.com www.yourdomain.com;
        return 404;
    }
    Passo 4 — Verificar a Instalação de SSL
    Após o Certbot ser concluído, verifique se o seu certificado SSL está corretamente instalado e funcionando.
    Método 1: Verificação no Navegador
    Abra o seu navegador web e navegue para https://yourdomain.com. Procure por:
    
    Ícone de cadeado na barra de endereços — confirma uma conexão SSL ativa e confiável
    Sem avisos de segurança — o certificado é válido e confiável pelo seu navegador
    HTTPS no URL — os pedidos HTTP devem ser redirecionados automaticamente para HTTPS
    
    Clique no ícone de cadeado e selecione "Certificado" para visualizar o emissor (deve mostrar "Let’s Encrypt") e a data de expiração.
    Método 2: Análise Profunda do SSL Labs
    Para uma auditoria de segurança abrangente, use o Qualys SSL Labs:
    
    Navegue para https://www.ssllabs.com/ssltest/
  • Introduza o seu nome de domínio
  • Clique em "Submit"
  • Uma configuração Let’s Encrypt + Nginx adequadamente configurada deve obter uma classificação de A ou A+. Se obtiver uma classificação inferior, o SSL Labs identificará as fraquezas específicas a resolver.

    Método 3: Verificação na Linha de Comando

    Verifique os detalhes do certificado diretamente a partir do terminal:

    sudo certbot certificates

    Resultado:

    Found the following certs:
      Certificate Name: yourdomain.com
        Serial Number: abc123...
        Key Type: RSA
        Domains: yourdomain.com www.yourdomain.com
        Expiry Date: YYYY-MM-DD HH:MM:SS+00:00 (VALID: 89 days)
        Certificate Path: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
        Private Key Path: /etc/letsencrypt/live/yourdomain.com/privkey.pem

    Método 4: Comando OpenSSL

    Verifique a cadeia de certificados e a expiração usando OpenSSL:

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

    Resultado esperado:

    notBefore=Mon Jan  1 00:00:00 2025 GMT
    notAfter=Tue Apr  1 00:00:00 2025 GMT
    issuer=C=US, O=Let's Encrypt, CN=R11

    Passo 5 — Configurar Renovação Automática de Certificados

    Os certificados Let's Encrypt expiram após 90 dias. Este período de validade curto é intencional — limita a exposição se uma chave privada for comprometida. O Certbot lida com renovações automaticamente, mas você deve verificar se a automação está funcionando corretamente.

    Como Funciona a Renovação do Certbot

    Quando você instala o Certbot via APT ou Snap, ele cria automaticamente um temporizador systemd (ou trabalho cron em sistemas mais antigos) que é executado duas vezes por dia. Ele verifica se algum certificado está dentro de 30 dias da expiração e os renova automaticamente.

    Verificar o Temporizador Systemd

    sudo systemctl status certbot.timer

    Saída esperada:

    ● certbot.timer - Run certbot twice daily
         Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
         Active: active (waiting) since ...
        Trigger: ...
       Triggers: ● certbot.service

    Se o temporizador estiver ativo e habilitado, a renovação automática já está configurada.

    Testar o Processo de Renovação (Execução Seca)

    Antes de confiar na renovação automática, simule-a para confirmar que tudo funciona:

    sudo certbot renew --dry-run

    Saída bem-sucedida:

    Simulating renewal of an existing certificate for yourdomain.com and www.yourdomain.com
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Congratulations, all simulated renewals succeeded:
      /etc/letsencrypt/live/yourdomain.com/fullchain.pem (success)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Se a execução seca for bem-sucedida, seus certificados serão renovados automaticamente sem qualquer intervenção manual.

    Verificar o Trabalho Cron (Sistemas Legados)

    Em versões mais antigas do Ubuntu que não usam temporizadores systemd, verifique o trabalho cron do Certbot:

    sudo cat /etc/cron.d/certbot

    Você deve ver uma linha semelhante a:

    0 */12 * * * root test -x /usr/bin/certbot -a ! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

    Isso executa o Certbot duas vezes por dia em intervalos aleatórios para evitar sobrecarregar os servidores Let's Encrypt.

    Renovação Manual (Se Necessário)

    Se você precisar forçar manualmente uma renovação:

    sudo certbot renew --force-renewal
    sudo systemctl reload nginx

    > Melhor prática: Após qualquer renovação de certificado (manual ou automática), recarregue o Nginx para garantir que ele pegue os novos arquivos de certificado:

    > “`bash

    > sudo systemctl reload nginx

    > “`

    > Os ganchos de renovação do Certbot lidam com isso automaticamente na maioria das configurações.

    Configurar Ganchos de Renovação

    Para garantir que o Nginx seja recarregado automaticamente após cada renovação, adicione um gancho de implantação:

    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

    Resolução de Problemas Comuns

    Erro: "Could not bind to IPv4/IPv6"

    Certbot usa a porta 80 para validação de domínio. Se outro processo estiver usando a porta 80, o desafio falhará.

    Solução: Pare temporariamente o Nginx, obtenha o certificado em modo standalone e reinicie:

    sudo systemctl stop nginx
    sudo certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com
    sudo systemctl start nginx

    Erro: "DNS problem: NXDOMAIN looking up A for yourdomain.com"

    Os registos DNS do seu domínio ainda não estão a propagar para os servidores de validação da Let's Encrypt.

    Solução: Verifique se o seu registo A está corretamente configurado:

    dig yourdomain.com A +short

    O resultado deve devolver o endereço IP público do seu servidor. A propagação de DNS pode levar até 48 horas, embora normalmente seja resolvida em 1–2 horas.

    Erro: "Too many certificates already issued"

    Let's Encrypt aplica um limite de taxa de 5 certificados duplicados por semana por domínio.

    Solução: Use a flag --staging para testar a sua configuração sem atingir limites de taxa:

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

    Após concluir os testes, revogue o certificado de teste e emita um de produção.

    Erro: "Nginx configuration test failed"

    Certbot modifica a sua configuração de Nginx. Se a configuração resultante tiver erros de sintaxe, o Nginx não será recarregado.

    Solução: Teste e corrija manualmente a configuração:

    sudo nginx -t
    sudo nano /etc/nginx/sites-available/yourdomain.com
    # Fix any syntax errors, then:
    sudo systemctl reload nginx

    Certificado Não Renova Automaticamente

    Se receber emails de aviso de expiração apesar de ter o Certbot instalado, verifique o estado do temporizador:

    sudo systemctl status certbot.timer
    sudo journalctl -u certbot.service --since "7 days ago"

    Revise os registos para erros e resolva-os em conformidade.

    Avançado: Endurecimento da sua Configuração Nginx SSL

    A configuração padrão Let’s Encrypt + Certbot é segura, mas você pode endurecê-la ainda mais para uma pontuação A+ no SSL Labs.

    Ativar HTTP/2

    Edite seu bloco de servidor para ativar HTTP/2 para melhor desempenho:

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    Adicionar HSTS (HTTP Strict Transport Security)

    HSTS instrui os navegadores a sempre usar HTTPS para seu domínio, mesmo se um usuário digitar http://:

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    Desativar Protocolos e Cifras Fracos

    Adicione estas diretivas ao seu nginx.conf ou bloco de servidor:

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

    Após fazer alterações, sempre teste e recarregue:

    sudo nginx -t && sudo systemctl reload nginx

    Escolher o Hosting Certo para a Sua Configuração Nginx + SSL

    O desempenho e a confiabilidade do seu servidor Nginx protegido por SSL dependem muito da infraestrutura subjacente. Aqui está como as opções de hosting da AlexHost se alinham com diferentes casos de uso:

    • VPS Hosting — Ideal para a maioria dos websites e aplicações. O acesso root completo permite-lhe configurar Nginx e Certbot exatamente como descrito neste guia. Os planos VPS da AlexHost funcionam em Ubuntu 18.04, 20.04 e 22.04 LTS.
    • Servidores Dedicados — Melhor para websites com alto tráfego que requerem desempenho máximo, recursos dedicados e controlo total do hardware. Execute múltiplos virtual hosts Nginx, cada um com o seu próprio certificado Let’s Encrypt.
    • VPS com cPanel — Se preferir uma interface gráfica para gerir certificados SSL juntamente com o seu hosting web, o cPanel integra-se com Let’s Encrypt e trata da emissão de certificados através da sua funcionalidade AutoSSL.
    • Certificados SSL — Para ambientes empresariais, sites de comércio eletrónico ou aplicações que requerem certificados de validação estendida (EV) ou validação de organização (OV), a AlexHost oferece certificados SSL premium com cobertura de garantia e suporte dedicado.

    Conclusão

    Proteger Nginx com um certificado SSL Let’s Encrypt no Ubuntu é um dos passos mais impactantes que pode tomar para proteger os seus utilizadores, melhorar a sua classificação nos motores de busca e construir confiança com o seu público. Todo o processo — desde a instalação do Certbot até à ativação de renovações automáticas — leva menos de 15 minutos e não custa nada.

    Para recapitular o que conseguiu neste guia:

    1. ✅ Instalou Certbot e o plugin Nginx
    2. ✅ Configurou um bloco de servidor Nginx adequado para o seu domínio
    3. ✅ Obteve um certificado SSL Let’s Encrypt fidedigno
    4. ✅ Verificou o certificado utilizando ferramentas de navegador, SSL Labs e OpenSSL
    5. ✅ Confirmou a renovação automática através do temporizador systemd e testes de execução seca
    6. ✅ Aplicou endurecimento avançado para uma classificação de segurança A+

    Com o seu servidor Nginx agora protegido, considere explorar camadas adicionais de proteção: uma Firewall de Aplicação Web (WAF), fail2ban para proteção contra ataques de força bruta e auditorias de segurança regulares. Se está a gerir múltiplos domínios ou aplicações, os Painéis de Controlo VPS da AlexHost fornecem uma interface simplificada para gerir certificados SSL, anfitriões virtuais e configurações de servidor sem sacrificar a flexibilidade de um ambiente Linux.

    Os seus utilizadores merecem uma ligação segura. Agora têm uma.