Secrets Web Tool (v2.17.3+)

Tool standalone no browser para gerar .runner/secrets.enc e ckey sem precisar instalar nada — 100% client-side via Web Crypto API.

URL: https://runner.ccs.systems/tools/secrets.html

Quando usar

  • Voce esta auto-hospedando um runner e quer encriptar .env antes de commitar no repo
  • Voce nao tem acesso a um servidor com runner instalado, mas quer preparar o .secrets.enc localmente
  • Voce quer rotacionar a ckey sem usar a CLI

Garantias

  • Zero servidor: nada e enviado para nenhum endpoint. Toda criptografia acontece no seu navegador
  • Sem analytics, sem trackers, sem cookies
  • Open source: codigo inteiro inline em `tools/secrets/index.html`. Use Ctrl+U ou view-source: pra inspecionar
  • Funciona offline: depois de carregar, pode desconectar a internet

Para confirmar:

  1. Abra o devtools (F12)
  2. Vai em Network
  3. Encripte algo
  4. Verifique: nenhuma requisicao foi feita

Como usar

1. Content Key (ckey)

Gere uma random ou cole a sua existente. Mesmo formato que o runner espera (32+ caracteres alfanumericos, sem espacos).

[ckey: cole ou gere ]    [Gerar random]  [Copiar]

A ckey so e mostrada uma vez — anote em password manager.

2. Conteudo do .env

Cole o conteudo do .env ou solte um arquivo. Apenas KEY=VALUE por linha. Comentarios (#) sao ignorados.

DB_PASSWORD=hunter2
JWT_SECRET=abc123def456
API_KEY=sk_live_xxx

3. Encriptar

Clica 🔒 Encriptar e baixar secrets.enc. Browser baixa o arquivo binario.

A tool mostra:

  • Tamanho do arquivo gerado
  • SHA-256 dos primeiros 16 chars (auditoria)
  • 3 comandos prontos pra commitar e usar no servidor

Formato compativel

Identico ao que o Runner ja decifra (src/secrets/mod.rs::decrypt_and_restore):

Aspecto Valor
Algoritmo AES-256-GCM
Chave SHA-256(ckey) — 32 bytes
Nonce 12 bytes random (crypto.getRandomValues)
Layout [12 bytes nonce][N bytes ciphertext + 16-byte GCM tag]
Plaintext interno ---ENV---\n\n---SECRETS---\n{KEY=VAL\n}*

Validado por `wizard::tests::decrypts_fixture_from_web_tool` (Rust unit test) e `tools/secrets/test_node.js` (Node round-trip).

Fluxo completo

# 1) No browser: https://runner.ccs.systems/tools/secrets.html
#    → Gera ckey, paste .env, baixa secrets.enc

# 2) No seu repo
mkdir -p .runner
mv ~/Downloads/secrets.enc .runner/secrets.enc
git add .runner/secrets.enc
git commit -m "chore: add encrypted secrets"
git push

# 3) No servidor com runner instalado
runner add --repo user/repo --branch main --ckey "<sua-ckey>"
# Runner detecta .runner/secrets.enc no clone e restaura .env automaticamente

Limitacoes intencionais

  • Nao decifra — voce so encripta. Decisao de seguranca: tool nao mostra plaintext de .env que ja esta encriptado, evitando vazamento acidental por screen-share ou print
  • Sem memoria — fechou a aba, perdeu a ckey/.env. Se quer editar, voce mantem o .env original local e re-encripta

FAQ

P: Posso usar isso pra rotacionar a ckey de uma app ja registrada?

R: Sim. Edite o .env original (que voce mantem fora do repo), gere uma nova ckey nesta tool, encripte e commite o novo .secrets.enc. No servidor:

runner edit <app> --ckey "<nova-ckey>"
runner fetch <app> --deploy

P: O ckey precisa ser igual ao do runner add da primeira vez?

R: Sim. O Runner usa o ckey pra decifrar .runner/secrets.enc. Se voce subir um arquivo encriptado com ckey diferente da registrada, o decrypt falha (mensagem clara no log).

P: Posso usar ckey curta (8 chars)?

R: Tecnicamente sim (mininum 8), mas nao deveria. SHA-256 derivada de uma ckey curta ainda e atacavel via brute force se o .secrets.enc cair em maos erradas. Use a tool pra gerar random (32 chars).

Ver tambem

By Borlot.com.br on 05/05/2026