guias
Segurança

HTTPS e SSL

Como funciona HTTPS na Veloz e como proteger a comunicação do seu app.

Todo app na Veloz tem HTTPS automático. Mas entender como funciona ajuda a evitar erros comuns.

O que a Veloz faz automaticamente

  • Certificado SSL provisionado via Let's Encrypt
  • Renovação automática antes da expiração
  • HTTPS obrigatório — HTTP redireciona para HTTPS
  • TLS 1.3 — Protocolo mais recente e seguro
  • HSTS — Navegador sempre usa HTTPS após primeira visita

Você não precisa configurar nada. Funciona para domínios .onveloz.com e domínios personalizados.

Domínio personalizado

Ao adicionar um domínio:

veloz domains add meuapp.com.br

O SSL é provisionado automaticamente em poucos minutos após o DNS propagar.

Tempo de provisionamento

Situação Tempo
Subdomínio .onveloz.com Instantâneo
Domínio personalizado (DNS ok) 1-5 minutos
Domínio personalizado (DNS propagando) Até 48 horas

Erros comuns

Mixed Content

Seu app carrega recursos HTTP dentro de uma página HTTPS:

<!-- ❌ Bloqueado pelo navegador -->
<img src="http://exemplo.com/foto.jpg" />
<script src="http://cdn.exemplo.com/lib.js"></script>
 
<!-- ✅ Correto -->
<img src="https://exemplo.com/foto.jpg" />
<script src="https://cdn.exemplo.com/lib.js"></script>

Dica: Use URLs relativas ou // (protocol-relative):

<img src="//exemplo.com/foto.jpg" />

API HTTP em app HTTPS

Se seu frontend está em HTTPS mas chama uma API em HTTP:

// ❌ Bloqueado — mixed content
fetch("http://api.meuapp.com/users");
 
// ✅ Correto
fetch("https://api.meuapp.com/users");

Use variáveis de ambiente para URLs de API:

const API_URL = process.env.NEXT_PUBLIC_API_URL;
fetch(`${API_URL}/users`);

Redirect loop

Se seu app força HTTPS no código, pode entrar em loop porque a Veloz já redireciona:

// ❌ Não faça isso — a Veloz já cuida
if (req.headers["x-forwarded-proto"] !== "https") {
  return res.redirect(`https://${req.headers.host}${req.url}`);
}

Remova redirecionamentos manuais de HTTP → HTTPS. A Veloz faz isso na camada de rede.

Cookies seguros

Em produção com HTTPS, sempre use cookies seguros:

// Configurar cookies em produção
res.cookie("session", token, {
  httpOnly: true, // Não acessível via JavaScript
  secure: true, // Apenas HTTPS
  sameSite: "lax", // Proteção contra CSRF
  maxAge: 86400000, // 24 horas
});

No Next.js:

import { cookies } from "next/headers";
 
const cookieStore = await cookies();
cookieStore.set("session", token, {
  httpOnly: true,
  secure: process.env.NODE_ENV === "production",
  sameSite: "lax",
});

Headers de segurança

A Veloz adiciona headers básicos, mas você pode reforçar no seu app:

Next.js

// next.config.js
module.exports = {
  async headers() {
    return [
      {
        source: "/(.*)",
        headers: [
          { key: "X-Frame-Options", value: "DENY" },
          { key: "X-Content-Type-Options", value: "nosniff" },
          { key: "Referrer-Policy", value: "strict-origin-when-cross-origin" },
          { key: "Permissions-Policy", value: "camera=(), microphone=()" },
        ],
      },
    ];
  },
};

Express/Hono

npm install helmet
import helmet from "helmet";
app.use(helmet());

Verificar SSL

Após o deploy, verifique se o SSL está funcionando:

# Verificar certificado
curl -vI https://meuapp.onveloz.com 2>&1 | grep "SSL certificate"
 
# Testar no browser
# O cadeado 🔒 deve aparecer na barra de endereço

Próximos passos