> ## Documentation Index
> Fetch the complete documentation index at: https://certplane.kippel.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Ejecutar el broker

> Instala certplane-broker, prepara su configuración y material TLS y ejecútalo bajo systemd.

Esta página cubre cómo ejecutar `certplane-broker` en un host. Referencia completa del esquema: [Configuración del broker](/es/configuration/broker). Para automatizarlo con Ansible: [guía de roles de Ansible](/es/guides/ansible).

## Requisitos previos

* Un [`step-ca`](https://smallstep.com/docs/step-ca/) accesible (emite las identidades — el broker solo necesita su bundle de CA).
* Certificado y clave TLS para la API mTLS del broker.
* Bundle de CA que firma los certificados de identidad de tus agentes (raíz o intermedia de `step-ca`).
* Email de cuenta ACME — el broker crea la cuenta en el primer uso.
* Credenciales del proveedor DNS para `dns-01`, si vas a emitir wildcards. Soportados: `cloudflare`, `httpreq`.

## Layout en disco

Layout recomendado, igual al del [role `certplane_broker`](/es/guides/ansible):

```
/etc/certplane/
├── broker.yml
├── policy.yml
├── tls/
│   ├── broker.crt
│   └── broker.key
└── ca/
    └── agent-identity-ca-bundle.crt
/var/lib/certplane/
├── acme/
│   └── account.key
└── broker.db
```

Un usuario de sistema `certplane` es dueño de `/var/lib/certplane` y de la clave de cuenta ACME.

## Configuración mínima

```yaml /etc/certplane/broker.yml theme={null}
server:
  address: ":8443"
  tls:
    cert: /etc/certplane/tls/broker.crt
    key: /etc/certplane/tls/broker.key
    min_version: "1.2"
  mtls:
    agent_ca_bundle: /etc/certplane/ca/agent-identity-ca-bundle.crt

policy:
  path: /etc/certplane/policy.yml
  watch: true

issuer:
  provider: acme
  acme:
    directory_url: https://acme-v02.api.letsencrypt.org/directory
    account_email: admin@example.com
    account_key: /var/lib/certplane/acme/account.key
    dns_provider: cloudflare

secrets:
  provider: env

store:
  driver: sqlite
  path: /var/lib/certplane/broker.db

audit:
  enabled: true
  failure_mode: fail_open

logging:
  level: info
  format: json
  destination: stdout
```

Referencia completa: [Configuración del broker](/es/configuration/broker). El esquema JSON está en [`schemas/broker.schema.json`](https://github.com/TaconeoMental/Certplane/blob/main/schemas/broker.schema.json).

## CLI

El binario es una app Cobra con flag global `-c` / `--config` y subcomandos:

| Comando                                                        | Propósito                                                                                         |
| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| `certplane-broker -c <config> serve`                           | Ejecuta la API HTTPS/mTLS.                                                                        |
| `certplane-broker -c <config> policy validate --policy <ruta>` | Compila y valida un archivo de política. Imprime el hash y los conteos de perfiles e identidades. |
| `certplane-broker -c <config> certs list`                      | Vuelca los bundles cacheados como JSON.                                                           |
| `certplane-broker -c <config> audit tail [--limit N]`          | Imprime eventos de auditoría recientes como JSON Lines.                                           |

`-c` es obligatorio para todo subcomando.

## Unidad systemd

El [role `certplane_broker`](/es/guides/ansible) incluye esta unidad. Manualmente:

```ini /etc/systemd/system/certplane-broker.service theme={null}
[Unit]
Description=certplane broker
After=network.target

[Service]
Type=simple
User=certplane
Group=certplane
ExecStart=/usr/local/bin/certplane-broker -c /etc/certplane/broker.yml serve
Restart=on-failure
RestartSec=5s
ReadWritePaths=/var/lib/certplane

[Install]
WantedBy=multi-user.target
```

Habilita e inicia:

```bash theme={null}
systemctl daemon-reload
systemctl enable --now certplane-broker
```

## Verifica que está corriendo

```bash theme={null}
curl --cacert /ruta/al/broker-server-ca.crt https://broker.example.com:8443/healthz
# ok

curl --cacert /ruta/al/broker-server-ca.crt https://broker.example.com:8443/readyz
# ready
```

`/readyz` devuelve `503 policy not loaded` hasta que la política está cargada.

El endpoint de emisión (`POST /v1/certificates`) requiere un certificado cliente válido y normalmente solo lo invoca `certplane-agent`.

## Recarga en caliente de la política

`policy.watch: true` recarga el archivo cuando cambia en disco. Sin reinicio. El broker registra el nuevo hash, útil para correlacionar con el log de auditoría.

## Siguientes pasos

* [Registro del agente](/es/setup/agent-enroll)
* [Resumen de política](/es/policy/overview)
* [Secretos en Vault y OpenBao](/es/guides/vault-secrets)
