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 nginxE confirmar que o seu domínio resolve corretamente usando:
dig yourdomain.com +shortPasso 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 -yInstalar 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 -yVerificar a Instalação
Confirme que o Certbot foi instalado com sucesso verificando a sua versão:
certbot --versionDeverá 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 statusO 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.comO Que Acontece Durante Este Processo?
- 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
- Emissão do certificado: O Let’s Encrypt emite um certificado assinado válido por 90 dias
- 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:
| Ficheiro | Finalidade |
|---|---|
fullchain.pem | O seu certificado + cadeia intermédia |
privkey.pem | A sua chave privada (mantenha em segredo) |
cert.pem | Apenas o certificado do seu domínio |
chain.pem | Apenas 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.comSe estiver a utilizar o ficheiro de configuração predefinido:
sudo nano /etc/nginx/sites-available/defaultConfiguraçã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 futurossl_stapling on: Ativa o OCSP stapling, reduzindo a latência do handshake SSLStrict-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 -tUm teste bem-sucedido retorna:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulSe 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 nginxVerifique se o Nginx está a funcionar corretamente após o reinício:
sudo systemctl status nginxPasso 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.timerDeverá 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-runA 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.shAdicione o seguinte conteúdo:
#!/bin/bash
systemctl reload nginxTorne-o executável:
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.shIsto 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 -datesResolução de Problemas Comuns de SSL no Nginx
| Problema | Causa Provável | Solução |
|---|---|---|
ERR_SSL_PROTOCOL_ERROR | Nginx não está a escutar na porta 443 | Verifique a diretiva listen 443 ssl; e as regras de firewall |
NET::ERR_CERT_AUTHORITY_INVALID | Utilização de cert.pem em vez de fullchain.pem | Atualize ssl_certificate para utilizar fullchain.pem |
| Certificado não está a renovar | Temporizador do Certbot desativado ou porta 80 bloqueada | Execute sudo certbot renew --dry-run e verifique os registos |
| Avisos de conteúdo misto | Recursos HTTP carregados numa página HTTPS | Atualize todos os links internos e URLs de recursos para HTTPS |
SSL_ERROR_RX_RECORD_TOO_LONG | Tráfego HTTP a atingir a porta HTTPS | Certifique-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.
