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
.envantes de commitar no repo - Voce nao tem acesso a um servidor com runner instalado, mas quer preparar o
.secrets.enclocalmente - 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+Uouview-source:pra inspecionar - Funciona offline: depois de carregar, pode desconectar a internet
Para confirmar:
- Abra o devtools (F12)
- Vai em Network
- Encripte algo
- 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_xxx3. 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 automaticamenteLimitacoes intencionais
- Nao decifra — voce so encripta. Decisao de seguranca: tool nao mostra plaintext de
.envque 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
.envoriginal 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> --deployP: 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
- `runner wizard` — versao CLI completa do mesmo fluxo
- Secrets e Encriptacao — visao geral da arquitetura mkey/ckey