# Peticiones al origen autenticadas (mTLS)

> Haz que el borde presente un certificado de cliente para que tu origen solo acepte las conexiones que llegan a través de OpenWAF.

Con **Exigir certificado del borde** activado, el borde presenta un certificado de cliente TLS cuando tu origen lo pide. Tu servidor exige entonces un certificado de cliente firmado por la **OpenWAF Edge Client CA** y rechaza cualquier otra conexión, incluidas las de un atacante que haya averiguado la IP de tu origen.

## Cómo funciona

- Cada nodo del borde tiene su propio certificado de cliente (ECDSA P-256, válido 30 días), emitido por la OpenWAF Edge Client CA y renovado automáticamente mucho antes de caducar.
- El borde solo lo presenta en los sitios con `origin.client_cert` a `true`, y solo cuando el origen pide un certificado de cliente.
- La Edge Client CA es **común a toda la plataforma**. Un certificado de cliente válido demuestra que «esta conexión viene del borde de OpenWAF», no que «viene para mi zona». Combínalo con las comprobaciones de la cabecera `Host` y del SNI en tu servidor y, si necesitas más, con tu propia autenticación.

> **Atención: El orden importa**
>
> Activa la opción en OpenWAF **antes** de exigir certificados de cliente en tu servidor; si no, tus sitios responderán `525` hasta que el cambio llegue a todos los nodos del borde. Para desactivarla, deja primero de exigirlo en el servidor.


## Configúralo

1. **Activa la opción y espera a que se propague.**

**Panel**

   En **SSL/TLS › Origen › Exigir certificado del borde**, activa **Presentar el certificado de cliente del borde** y pulsa **Guardar cambios**. Revisa **Cambios › Propagación** hasta que todos los nodos hayan aplicado la versión nueva.

**CLI**

   ```sh
   openwaf-cloud ctl zones set example.com origin.client_cert:=true --reason "mTLS hacia el origen" --wait
   ```

   `--wait` termina cuando todos los nodos han aplicado la versión nueva.

**API**

   ```sh
   curl -s -X PATCH https://dash.openwaf.dev/v1/orgs/$ORG/zones/$ZONE/edge \
     -H "Authorization: Bearer $OPENWAF_TOKEN" \
     -H "Content-Type: application/json" \
     -H "X-Change-Reason: mTLS hacia el origen" \
     -d '{"origin": {"client_cert": true}}'
   ```

**MCP**

   `update_settings` con `{"zone": "example.com", "settings": {"origin": {"client_cert": true}}, "reason": "mTLS hacia el origen"}`, primero con `confirm=false` y después con `confirm=true`. Comprueba luego `zone_propagation`.


2. **Descarga la Edge Client CA** en tu servidor:

   ```sh
   curl -fsS https://dash.openwaf.dev/v1/origin-tls/edge-client-ca.pem -o openwaf-edge-client-ca.pem
   # o bien: openwaf-cloud ctl origin-tls ca --client > openwaf-edge-client-ca.pem
   ```

   El panel ofrece el mismo fichero en **Descargar la Edge Client CA (PEM)**.

3. **Exige certificados de cliente en el servidor** (ejemplos abajo) y recárgalo.

4. **Comprueba.** En el estado del origen, el nombre muestra **mTLS** y no aparecen errores `525`. Desde fuera del borde, una conexión sin certificado de cliente debe fallar:

   ```sh
   curl -sv https://203.0.113.10/ -H 'Host: www.example.com' -k -o /dev/null
   ```


## Ejemplos de servidor

**nginx**

```nginx
server {
    listen 443 ssl;
    ssl_certificate        /etc/nginx/tls/origin.pem;
    ssl_certificate_key    /etc/nginx/tls/origin.key;
    # Solo conexiones desde el borde de OpenWAF
    ssl_client_certificate /etc/nginx/tls/openwaf-edge-client-ca.pem;
    ssl_verify_client      on;
    ssl_verify_depth       1;
}
```

**Caddy**

```text
example.com {
    tls /etc/caddy/tls/origin.pem /etc/caddy/tls/origin.key {
        client_auth {
            mode require_and_verify
            trust_pool file /etc/caddy/tls/openwaf-edge-client-ca.pem
        }
    }
    reverse_proxy 127.0.0.1:8080
}
```

En Caddy anterior a 2.8, usa `trusted_ca_cert_file /etc/caddy/tls/openwaf-edge-client-ca.pem` en lugar de `trust_pool`.

**Apache**

```text
<VirtualHost *:443>
    ServerName example.com
    SSLEngine on
    SSLCertificateFile    /etc/ssl/openwaf/origin.pem
    SSLCertificateKeyFile /etc/ssl/openwaf/origin.key
    SSLCACertificateFile  /etc/ssl/openwaf/openwaf-edge-client-ca.pem
    SSLVerifyClient require
    SSLVerifyDepth  1
</VirtualHost>
```

**Traefik**

```yaml
tls:
  options:
    openwaf-edge:
      clientAuth:
        caFiles:
          - /certs/openwaf-edge-client-ca.pem
        clientAuthType: RequireAndVerifyClientCert
http:
  routers:
    example:
      rule: Host(`example.com`)
      tls:
        options: openwaf-edge@file
      service: example
```

Con etiquetas de Docker: `traefik.http.routers.example.tls.options=openwaf-edge@file`.


## Mantén la CA al día

Cuando la Edge Client CA rota, la URL de descarga devuelve la antigua y la nueva mientras las dos sean válidas. Vuelve a descargarla con regularidad; basta con un `curl` programado una vez al día.

## Relacionado

- [Modos de TLS con el origen](https://developers.openwaf.dev/es/ssl/origin-tls/)
- [Solución de problemas con el 525](https://developers.openwaf.dev/es/ssl/troubleshooting/#error-525)
