> ## 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.

# Perfiles

> Formas de certificado con nombre que los hosts pueden solicitar al broker.

Un perfil define un tipo de certificado que el broker puede emitir. Los nombres se referencian desde `hosts` en la política y desde `certificates[].profile` en `agent.yml`.

```yaml theme={null}
profiles:
  public_edge_main:
    type: wildcard
    dns_names:
      - "*.example.com"
    acme:
      challenge: dns-01
      credentials: cloudflare/example-com
    renew_before: 720h

  api_san:
    type: multi_san
    dns_names:
      - api.example.com
      - api-v2.example.com
    acme:
      challenge: http-01
```

## Campos

| Campo              | Tipo                          | Obligatorio   | Notas                                                                  |
| ------------------ | ----------------------------- | ------------- | ---------------------------------------------------------------------- |
| `type`             | enum: `wildcard`, `multi_san` | sí            |                                                                        |
| `dns_names`        | string\[]                     | sí            | DNS permitidos. No vacío.                                              |
| `acme.challenge`   | enum: `dns-01`, `http-01`     | sí            | Wildcards exigen `dns-01`.                                             |
| `acme.credentials` | string                        | para `dns-01` | Referencia de secreto resuelta por el provider configurado.            |
| `renew_before`     | duration                      | no (`720h`)   | Cuándo considera el broker que el certificado cacheado debe renovarse. |

El esquema rechaza campos extra por perfil (`additionalProperties: false`).

## `type: wildcard`

Para certificados `*.zona`.

* `dns_names` debe contener exactamente una entrada de la forma `*.<zona>`.
* `acme.challenge` debe ser `dns-01`.
* `acme.credentials` obligatorio y resuelve al credencial del provider DNS.

El CSR del agente debe pedir una SAN que caiga bajo la misma zona wildcard.

```yaml theme={null}
public_edge_main:
  type: wildcard
  dns_names:
    - "*.example.com"
  acme:
    challenge: dns-01
    credentials: cloudflare/example-com
```

## `type: multi_san`

Para certificados con lista fija de SAN.

* `dns_names` lista cada SAN que el perfil puede incluir.
* `acme.challenge` puede ser `dns-01` o `http-01`.
* `acme.credentials` obligatorio para `dns-01`.
* Las SAN del CSR del agente deben ser subconjunto de `dns_names`.

```yaml theme={null}
api_san:
  type: multi_san
  dns_names:
    - api.example.com
    - api-v2.example.com
  acme:
    challenge: http-01
```

## `renew_before`

Es la ventana de renovación **del broker**. Cuando el agente pide un certificado cacheado y al cacheado le queda menos de `renew_before`, el broker pide uno nuevo a ACME en lugar de devolver el cache. El agente también tiene su propio `renew_before` en `agent.yml` — han de ser parecidos.

Valor típico: `720h` (30 días) con certificados Let's Encrypt de 90 días.

## Referencias de credenciales

La cadena `acme.credentials` es opaca para el compilador de política. La interpreta el provider de secretos en `broker.yml`:

| Provider            | Interpretación de `acme.credentials` |
| ------------------- | ------------------------------------ |
| `env`               | Nombre de variable de entorno.       |
| `file`              | Ruta de archivo en el broker.        |
| `vault` / `openbao` | Ruta en Vault bajo `mount_path`.     |

Ver [Providers de secretos](/es/configuration/secrets) y [Secretos en Vault y OpenBao](/es/guides/vault-secrets).
