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:
| Requisito | Detalhes |
|---|---|
| Sistema Operacional | Ubuntu 18.04, 20.04, ou 22.04 LTS |
| Servidor Web | Nginx instalado e servindo ativamente seu site |
| Nome de Domínio | Um domínio registado com um registo A apontando para o IP público do seu servidor |
| Acesso ao Servidor | Acesso SSH com um utilizador que tenha privilégios sudo |
| Firewall | Portas 80 (HTTP) e 443 (HTTPS) abertas em UFW ou iptables |
| Acesso Root | Nã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 nginxDeverá 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 nginxAbrir Portas Firewall Necessárias
Se UFW estiver ativado, permita tráfego HTTP e HTTPS:
sudo ufw allow 'Nginx Full'
sudo ufw reload
sudo ufw statusA 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 -yInstale o Certbot com o Plugin Nginx
sudo apt install certbot python3-certbot-nginx -yVerifique a Instalação
certbot --versionSaí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.comAdicione 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 -tResultado esperado:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulRecarregar Nginx
sudo systemctl reload nginxPasso 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.comDesagregaçã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/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 certificatesResultado:
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.pemMé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 -issuerResultado 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=R11Passo 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.timerSaí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.serviceSe 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-runSaí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/certbotVocê 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 renewIsso 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.shAdicione o seguinte conteúdo:
#!/bin/bash
systemctl reload nginxTorne-o executável:
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.shResoluçã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 nginxErro: "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 +shortO 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.comApó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 nginxCertificado 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 nginxEscolher 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:
- ✅ Instalou Certbot e o plugin Nginx
- ✅ Configurou um bloco de servidor Nginx adequado para o seu domínio
- ✅ Obteve um certificado SSL Let’s Encrypt fidedigno
- ✅ Verificou o certificado utilizando ferramentas de navegador, SSL Labs e OpenSSL
- ✅ Confirmou a renovação automática através do temporizador systemd e testes de execução seca
- ✅ 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.
em todos os serviços de alojamento