# Repositório de Certificados (A1/A3)

Este módulo provê armazenamento criptografado, controle de acesso com MFA (TOTP), auditoria e backups seguros de certificados digitais, visando conformidade com ICP-Brasil.

## Configuração

- Defina `CERT_STORE_KEY` no ambiente com uma chave secreta de 32 bytes. Recomenda-se hexadecimal de 64 caracteres, por exemplo: `CERT_STORE_KEY=8b6f...`.
- Opcional: `CERT_BACKUP_DIR` para alterar a pasta padrão de backups.

## Migrações

- Tabelas: `certificates`, `certificate_audits`, `user_mfa` (para TOTP).
- Aplique migrações por tenant via painel admin ou endpoint já existente de migrações.

## MFA (TOTP)

Fluxo sugerido (autenticado no tenant):
1. `POST /api/auth/mfa/setup` → retorna `base32` e `otpauth://` para configurar no app autenticador.
2. `POST /api/auth/mfa/enable` com `{ code }` → ativa o TOTP do usuário.
3. `POST /api/auth/mfa/verify` com `{ code }` → retorna `mfa_token` (expira em 5 minutos).
4. Envie `x-mfa-token: <mfa_token>` nos endpoints de certificados.

## Endpoints de Certificados

- `GET /api/fiscal/certificates` — lista metadados dos certificados do tenant (sem payloads).
- `POST /api/fiscal/certificates/a1` — cadastra A1
  Body: `{ cnpj, environment: "homologation"|"production", pfx_b64, password }`
- `POST /api/fiscal/certificates/a3` — cadastra A3
  Body: `{ cnpj, environment, module_path, token_label, cert_label, pin? }`
- `GET /api/fiscal/certificates/{id}` — detalhe (não expõe o blob criptografado).
- `DELETE /api/fiscal/certificates/{id}` — remove o certificado.
- `POST /api/fiscal/certificates/{id}/backup` — gera arquivo JSON com payload criptografado e metadados (confidencial), em `CERT_BACKUP_DIR`.

## Seleção Automática

Durante a autorização NFC-e mock, o sistema tenta selecionar um certificado do tenant por CNPJ e ambiente, preferindo A1 válido por data. A seleção é auditada.

## Segurança e Integridade

- Os payloads usam AES-256-GCM com HKDF por registro (salt). GCM provê confidencialidade e integridade.
- Segredos de TOTP são criptografados com a mesma chave mestra.
- Toda operação relevante é registrada em `certificate_audits` com IP/UA quando disponível.

## Backups

- Backups armazenam o payload criptografado (base64) e os metadados. Não há material sensível em texto puro.
- Mantenha `CERT_BACKUP_DIR` fora de diretórios públicos. Restrinja permissões no sistema operacional e em rotinas de cópia offsite.