SSL grátis com Let's Encrypt e Nginx

    HTTPS é obrigatório em 2025. Browsers marcam sites HTTP como "não seguro", o Google penaliza no ranking e APIs modernas exigem TLS. Let's Encrypt fornece certificados SSL gratuitos e automáticos. Com Certbot e Nginx na VPS, o processo leva menos de 5 minutos e a renovação é automática.

    Instalar Certbot e obter o primeiro certificado

    Certbot é o cliente oficial do Let's Encrypt. Instale via snap para a versão mais recente:

    bash
    # Instalar Certbot
    apt install -y snapd
    snap install core && snap refresh core
    snap install --classic certbot
    ln -s /snap/bin/certbot /usr/bin/certbot
    
    # Obter certificado com configuração automática do Nginx
    certbot --nginx -d seudominio.com.br -d www.seudominio.com.br
    
    # Múltiplos subdomínios no mesmo certificado
    certbot --nginx -d app.dominio.com.br -d api.dominio.com.br -d admin.dominio.com.br
    
    # Ver certificados emitidos
    certbot certificates
    Dica
    O Certbot precisa que as portas 80 e 443 estejam abertas no firewall e que o domínio aponte para o IP da VPS. O desafio HTTP-01 (padrão) valida o domínio servindo um arquivo temporário na porta 80.

    Configuração Nginx com SSL otimizado

    Configuração SSL segura seguindo as recomendações Mozilla Intermediate:

    nginx
    # /etc/nginx/sites-available/seudominio.com.br
    
    server {
        listen 80;
        server_name seudominio.com.br www.seudominio.com.br;
        return 301 https://$host$request_uri;
    }
    
    server {
        listen 443 ssl;
        http2 on;
        server_name seudominio.com.br www.seudominio.com.br;
    
        ssl_certificate /etc/letsencrypt/live/seudominio.com.br/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/seudominio.com.br/privkey.pem;
    
        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_timeout 1d;
        ssl_session_cache shared:SSL:10m;
        ssl_session_tickets off;
    
        ssl_stapling on;
        ssl_stapling_verify on;
    
        location / {
            proxy_pass http://app:3000;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

    Certificado wildcard com Cloudflare DNS

    Wildcard cobre todos os subdomínios e exige desafio DNS-01:

    bash
    # Instalar plugin Cloudflare
    apt install python3-certbot-dns-cloudflare
    
    # Criar credenciais
    cat > /etc/letsencrypt/cloudflare/credentials.ini << 'EOF'
    dns_cloudflare_api_token = SEU_TOKEN_AQUI
    EOF
    chmod 600 /etc/letsencrypt/cloudflare/credentials.ini
    
    # Obter certificado wildcard
    certbot certonly \
      --dns-cloudflare \
      --dns-cloudflare-credentials /etc/letsencrypt/cloudflare/credentials.ini \
      -d seudominio.com.br \
      -d "*.seudominio.com.br"
    Dica
    Wildcard exige desafio DNS-01 (não HTTP-01). O token da API Cloudflare precisa de permissão Zone:DNS:Edit. Um certificado wildcard cobre api.dominio.com.br, app.dominio.com.br, etc.

    Renovação automática e monitoramento

    Verifique que a renovação automática está configurada e funcionando:

    bash
    # Ver timer de renovação (systemd)
    systemctl status snap.certbot.renew.timer
    
    # Testar renovação sem aplicar
    certbot renew --dry-run
    
    # Ver data de expiração
    certbot certificates
    # ou
    openssl x509 -in /etc/letsencrypt/live/seudominio.com.br/fullchain.pem -noout -dates
    
    # Verificar SSL externamente
    curl -I https://seudominio.com.br | grep -i "strict-transport"

    SSL com Certbot em stack Docker

    Gerencie certificados para containers com o padrão Nginx + Certbot via Compose:

    yaml
    services:
      nginx:
        image: nginx:alpine
        ports: ["80:80", "443:443"]
        volumes:
          - ./nginx/conf.d:/etc/nginx/conf.d:ro
          - certbot_conf:/etc/letsencrypt
          - certbot_www:/var/www/certbot
    
      certbot:
        image: certbot/certbot
        volumes:
          - certbot_conf:/etc/letsencrypt
          - certbot_www:/var/www/certbot
        entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
    
    volumes:
      certbot_conf:
      certbot_www:

    $ runstack deploy --plan starter

    Não quer configurar manualmente?

    Não quer configurar manualmente? Implante o VPS em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.

    Perguntas frequentes