Pular para conteúdo

Gerar as chaves e segredos do central-backend

Status: Aprovado · Responsável: Gustavo Madruga · Atualizado em: 2026-06-30

Segredos

Gere estes valores numa máquina segura (não no servidor de produção) e guarde a chave privada em cofre (Bitwarden/1Password). Vazou → rotacione (ver Rotação de chaves RSA).

O que é

Os segredos que o serviço precisa antes do primeiro deploy: o par de chaves RSA que assina os JWT e (legado) a chave AES.

Quando usar

  • Antes do primeiro deploy de um ambiente novo.
  • Ao provisionar um ambiente de staging/teste isolado.

Pré-requisitos

  • openssl na máquina local.

Passos

  1. Chave privada RSA-2048 (PKCS#8):

    openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out auth_private.pem
    openssl pkey -in auth_private.pem -pubout -out auth_public.pem
    
  2. Converter a privada para base64 de linha única (valor de AUTH_PRIVATE_KEY):

    base64 -w0 auth_private.pem > auth_private_b64.txt
    
  3. No Coolify, defina as variáveis do serviço:

    • AUTH_PRIVATE_KEY = conteúdo de auth_private_b64.txt
    • AUTH_KEY_ID = identificador da chave (ex. auth-1); precisa ser único por chave
    • AUTH_ISSUER = https://auth.xadm.biz

Verificação

  • Após o deploy, o JWKS expõe a chave pública com alg=RS256:

    curl -sf https://auth.xadm.biz/.well-known/jwks.json | jq '.keys[0] | {alg, kid}'
    # Esperado: {"alg":"RS256","kid":"auth-1"}
    

Reversão

Trocar a chave depois de em uso exige coordenação com o PowerSync (que cacheia o JWKS) — siga o runbook de Rotação de chaves RSA.


AES (AUTH_CIPHER_KEY) — obrigatória quando a Central de Apps provisiona Garage

A chave AES-256 (openssl rand -base64 32, exatamente 32 bytes em base64) cifrava a senha do banco de cada cliente em clientes.db_pass. Após a centralização de pabast_senhas (decisão 0003) essas colunas foram removidas — mas a chave voltou a ser usada pela Central de Apps: o GarageProvider cifra com ela o secret_access_key da write-key do bucket (decisão 0012). Ausente ou vazia, o provisionamento de Garage é recusado antes de criar qualquer recurso (erro claro, sem bucket/key órfãos). Gere-a em qualquer ambiente que for provisionar arquivos.