
CA SSH de Confiança Zero
Ephemera é uma Autoridade Certificadora SSH leve e auto-hospedada, projetada para impor acesso Zero-Trust à infraestrutura. Ela substitui chaves SSH estáticas por certificados de curta duração, integra WebAuthn MFA com suporte a hardware e mantém trilhas de auditoria criptograficamente verificáveis.
[!NOTE] Fonte Canônica: Codeberg
Espelho GitHub: GitHub (para disponibilidade e hospedagem)
graph LR
subgraph Client["User (Operator)"]
SSH["SSH Client"]
HW["Hardware Key<br/>WebAuthn / YubiKey"]
end
subgraph Auth["Authentication Boundary"]
MFA["WebAuthn MFA<br/><i>Human presence required</i>"]
OIDC["OIDC<br/><i>Optional</i>"]
end
subgraph CA["Ephemera SSH Certificate Authority"]
CORE["Self-hosted CA<br/>Air-gap capable"]
POLICY["Policy Engine<br/><i>Governance at issuance</i>"]
BUDGET["Trust Budgeting<br/><i>Optional</i>"]
end
subgraph Targets["Target Servers"]
NATIVE["Native OpenSSH<br/>TrustedUserCAKeys"]
NOAGENT["No agents<br/>No SSH proxy"]
end
subgraph Audit["Audit & Recovery"]
LOG["Tamper-Evident<br/>Audit Log"]
BACKUP["Encrypted Backups<br/>Shamir Recovery"]
end
Client --> Auth
Auth -->|"Short-lived cert"| CA
CA -->|"Certificate expires<br/>automatically"| Targets
CA -.->|"Post-fact integrity"| Audit
style Auth fill:#e8f5e9,stroke:#2e7d32
style CA fill:#e3f2fd,stroke:#1565c0
style Audit fill:#fff3e0,stroke:#ef6c00
O que o Ephemera faz: Governa quem pode receber acesso e por quanto tempo.
O que o Ephemera NÃO faz: Monitoramento em tempo de execução, proxy MITM, inspeção de comandos.
Aplicação: Integralmente dentro do OpenSSH nativo — nenhum agente Ephemera nos servidores de destino.
Rotação de chaves: Desnecessária — os certificados expiram automaticamente.
O Ephemera é uma Autoridade Certificadora SSH auto-hospedada construída sobre os recursos nativos do OpenSSH. Ele substitui chaves SSH de longa duração por certificados de curta duração emitidos no momento exato (just-in-time), com presença física explícita e escalonamento de privilégios auditável.
Ele foi projetado para equipes que desejam governança SSH centralizada sem proxies MITM, protocolos personalizados ou dependências de nuvem.
Funcionalidade principal de CA SSH: Pronta para produção
Trust Budgeting: Experimental (opt-in, sujeito a alterações)
Os recursos experimentais são claramente isolados e desabilitados por padrão.
O SSH tradicional depende de chaves privadas de longa duração espalhadas por laptops e servidores. Quando uma chave vaza, o acesso persiste até que você a descubra e rotacione as chaves em todos os lugares. O Ephemera substitui chaves estáticas por certificados de curta duração que expiram automaticamente, reduzindo a janela de uso indevido de meses para minutos.
Acesso Just-in-Time: Os certificados expiram em minutos (padrão de 5m), reduzindo a janela de oportunidade para credenciais roubadas.
Aplicação de WebAuthn: A emissão de certificados exige interação física de MFA (FIDO2) via YubiKey ou TouchID.
Recuperação Soberana: Backups criptografados são protegidos pelo Compartilhamento de Segredo de Shamir, exigindo quórum para restaurar.
Auditoria Verificável: Todas as ações da CA são registradas em um ledger encadeado por Merkle para um histórico à prova de adulteração.
RBAC Granular: Um mecanismo de políticas baseado em YAML define acesso com base em papéis, recursos e condições.

O Ephemera inclui um primitivo de governança experimental e opt-in chamado Trust Budgeting.
O Trust Budgeting limita a autoridade privilegiada acumulada no momento da emissão de certificados, tratando o acesso como um recurso finito e visível. Cada emissão de certificado consome um orçamento explícito. Quando o orçamento é esgotado, a emissão normal é interrompida até que o orçamento seja redefinido ou um caminho de emergência separado (break-glass) seja utilizado.
Este mecanismo:
O Trust Budgeting é experimental e pode ser alterado ou removido.
Documentação: docs/trust_budgeting.md
O Ephemera inclui o GateBridge, um sistema de avaliação sombra que valida decisões de política contra um mecanismo alternativo (Gate0) sem afetar o comportamento em produção.
policy-shadow.log)Cada entrada contém:
GET /api/admin/gate0/status
Retorna:
{
"bridge_version": "1.0.0",
"gate0_version": "v0.2.1",
"policy_hash": "sha256:8f4b...",
"status": "healthy",
"last_mismatch": null,
"telemetry": {
"latency_p50_ms": 2.3,
"latency_p95_ms": 5.1,
"latency_p99_ms": 8.7
}
}
O GateBridge pode ser desabilitado por meio de uma flag de configuração. O modo sombra é fail-open e não afeta decisões de autorização.
Nenhuma mudança que quebre a interface de linha de comando do Gate0. Os logs sombra ganham novos campos, mas continuam sendo analisáveis por versões anteriores.
Objetivo: Emitir seu primeiro certificado SSH em menos de 5 minutos.
# Clone and start
git clone https://github.com/Qarait/ephemera.git
cd ephemera
docker compose up -d
Nota: A senha mestra da CA é gerada automaticamente e persistida na primeira execução.
Para produção, definaCA_MASTER_PASSWORDem um arquivo.envantes de iniciar.
[!IMPORTANT] Implantações em Produção: Use o backend SoftHSM para isolamento de chaves com suporte a hardware. A chave privada da CA nunca toca o disco. Consulte o Guia de Configuração PKCS#11.
Abra http://localhost:3000 no seu navegador.
Credenciais padrão:
admindocker compose logs ephemera | grep "Password:"
Arquivos Compose Alternativos:
docker-compose.dev.yml — Desenvolvimento com builds locais e syslogdocker-compose.test.yml — Inclui um destino SSH para testes de ponta a ponta# Install the CLI from source
git clone https://github.com/Qarait/ephemera.git
cd ephemera
pip install .
# Initialize your SSH config
ephemera init
# Login to the CA
ephemera login
# Issue your first certificate
ephemera renew
# Check your status
ephemera status
# Connect securely!
ssh user@your-server
O Ephemera oferece um mecanismo de backup seguro que criptografa seus dados críticos (chaves da CA, banco de dados) com uma senha aleatória e, em seguida, divide essa senha em fragmentos (shards) Shamir. Isso garante que nenhuma pessoa isolada possa restaurar o backup, mas um quórum pode.
# Create encrypted backup and split password into 5 shards (threshold 3)
ephemera backup-create --k 3 --n 5 --out-dir ./backup
Isso gera:
ephemera_backup.enc (O arquivo criptografado)backup_shard_1_of_5.json, etc. (Os fragmentos da senha)Nota: Armazene os fragmentos em locais seguros e separados. Guarde o arquivo de backup criptografado em local seguro (ele é inútil sem os fragmentos).
# Restore using the encrypted file and any 3 shards
ephemera backup-restore --backup ./backup/ephemera_backup.enc --shards ./backup/backup_shard_1_of_5.json ./backup/backup_shard_2_of_5.json ./backup/backup_shard_4_of_5.json --out-dir ./restored
policy.yaml)O Ephemera usa um poderoso mecanismo de políticas baseado em YAML para Controle de Acesso Baseado em Papéis (RBAC).
# Define Roles
roles:
developer:
can_request_cert: true
max_cert_duration: 300 # 5 minutes
allowed_principals: ["dev-user"]
admin:
can_request_cert: true
max_cert_duration: 3600 # 1 hour
allowed_principals: ["root", "admin"]
can_approve_sudo: true
# Define Rules
rules:
# Developers can only access dev servers
- role: developer
resource: "dev-*"
action: "ssh"
effect: allow
# Admins can access everything with MFA
- role: admin
resource: "*"
action: "ssh"
effect: allow
conditions:
mfa_required: true
Consulte SECURITY.md para informações sobre divulgação responsável.
Quer contribuir? Confira nossas Pequenas Tarefas para Novos Contribuidores.
[!TIP] O modelo de ameaças e as suposições de segurança estão documentados aqui. Feedbacks e críticas são bem-vindos.
| Campo | Descrição |
|---|
timestamp | timestamp ISO 8601 (UTC) |
match | Booleano — os dois mecanismos concordaram? |
versions.bridge | versão Python do GateBridge |
versions.gate0 | versão da CLI do Gate0 |
versions.policy_hash | hash SHA256 do policy.yaml |
context_hash | hash SHA256 da entrada canônica |
yaml_decision | resultado do mecanismo YAML |
gate0_decision | resultado do mecanismo Gate0 |
snapshot | Contexto completo (somente em divergência, com limite de tamanho) |