TLS al origen y Origin CA

Ver en Markdown

Emite y revoca certificados de origen de la OpenWAF Origin CA, comprueba el TLS al origen y descarga las CA.

En esta página

Cifra y autentica la conexión entre el borde y tu origen. El borde verifica en modo full_strict los certificados de origen emitidos por la OpenWAF Origin CA, y puede presentar su propio certificado de cliente (mTLS) a los orígenes que lo exijan. Consulta SSL/TLS.

OperaciónRuta
Listar certificados de origenGET /v1/orgs/{org}/zones/{zone}/origin-certs
Emitir un certificado de origenPOST /v1/orgs/{org}/zones/{zone}/origin-certs
Revocar un certificado de origenDELETE /v1/orgs/{org}/zones/{zone}/origin-certs/{cert}
Ver el estado del TLS al origenGET /v1/orgs/{org}/zones/{zone}/origin-tls/status
Descargar la Origin CAGET /v1/origin-tls/origin-ca.pem
Descargar la CA de cliente del bordeGET /v1/origin-tls/edge-client-ca.pem

Listar certificados de origen

GET /v1/orgs/{org}/zones/{zone}/origin-certs

Lista los certificados de origen emitidos para la zona, del más reciente al más antiguo, con sus nombres, tipo de clave, serie, caducidad y estado (active, revoked, expired). Nunca devuelve claves privadas.

Rol necesario: readonly o superior.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).
zonerutastring (uuid)SíId de la zona (consulta Listar zonas).

Respuesta

CampoTipoDescripción
items[].idstring (uuid)Id.
items[].zone_idstring (uuid)Id de la zona.
items[].hostnamesarray de string
items[].key_typestringcsr: se certificó la clave pública de una petición. Uno de ecdsa_p256, rsa2048, csr.
items[].serialstringHexadecimal en minúsculas sin ceros a la izquierda.
items[].fingerprint_sha256stringHuella SHA-256 del certificado.
items[].not_beforestring (date-time)Inicio de la validez.
items[].not_afterstring (date-time)Fin de la validez.
items[].validity_daysinteger
items[].statusstringrevoked gana a expired. Uno de active, revoked, expired.
items[].created_bystringQuién lo creó (actor).
items[].created_atstring (date-time)Fecha de creación.
items[].revoked_atstring (date-time) o nullFecha de revocación (null si está activo).
items[].revoked_bystring o nullQuién lo revocó.

Errores

EstadoDescripción
404No existe o el token no lo ve (not_found).
503unavailable: la Origin CA no está disponible ahora.

Ejemplo

curl "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/origin-certs" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
{
  "items": [
    {
      "id": "a5614527-0ce6-43be-ad1d-d012b7394867",
      "zone_id": "6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d",
      "hostnames": [
        "example.com",
        "*.example.com"
      ],
      "key_type": "ecdsa_p256",
      "serial": "5f3a9c0e7b21d4a68c13e9f02b7d4a61",
      "fingerprint_sha256": "example",
      "not_before": "2026-10-27T09:30:00Z",
      "not_after": "2026-10-27T09:30:00Z",
      "validity_days": 0,
      "status": "active",
      "created_by": "token:11111111-2222-4333-8444-555555555555",
      "created_at": "2026-10-27T09:30:00Z",
      "revoked_at": "2026-10-27T09:30:00Z",
      "revoked_by": null
    }
  ]
}

Emitir un certificado de origen

POST /v1/orgs/{org}/zones/{zone}/origin-certs

Emite un certificado firmado por la OpenWAF Origin CA para nombres de la zona, para instalarlo en el servidor de origen y que el borde lo pueda verificar en modo full_strict. El certificado solo lleva nombres DNS (SAN), uso de autenticación de servidor, un número de serie aleatorio de 128 bits y el primer nombre como CN.

OpenWAF genera la clave (key_type) salvo que envíes un csr. La clave privada solo se devuelve en esta respuesta (Cache-Control: no-store) y nunca se guarda. Con dry_run=1 solo se valida la petición.

Rol necesario: tech o superior.

Controles de cambio: dry_run · X-Change-Reason (opcional)

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).
zonerutastring (uuid)SíId de la zona (consulta Listar zonas).
X-Change-ReasoncabecerastringNoMotivo del cambio (1-500 caracteres UTF-8, sin caracteres de control); por defecto, el alta de la zona. De 1 a 500 caracteres.
dry_runconsultastringNo1/true simula el cambio: responde 200 con el plan (Applied) y no guarda nada. Admite 0/false; otro valor: 400. Uno de 1, true, 0, false.

Cuerpo de la petición

Tipo de contenido application/json. Esquema: OriginCertRequest.

CampoTipoObligatorioDescripción
hostnamesarray de stringSíLa zona, nombres por debajo o comodines *.<nombre de la zona>; se pasan a minúsculas y sin repetir. De 1 a 100 elementos.
key_typestringNoClave que genera OpenWAF (vacío con csr). Uno de ecdsa_p256, rsa2048. Por defecto ecdsa_p256.
validity_daysintegerNoUno de 7, 30, 90, 365, 730, 1095, 5475. Por defecto 5475.
csrstringNoPetición PEM (ECDSA P-256/P-384 o RSA 2048-8192): se certifica su clave pública; su sujeto y extensiones se ignoran y no se genera clave.

Respuesta

CampoTipoDescripción
dry_runbooleanSolo con ?dry_run=1: lo que se emitiría; sin PEM.
certificateOriginCert
certificate_pemstring
private_key_pemstringPKCS#8. Solo en esta respuesta (no se guarda); se omite con csr.
ca_pemstringLa OpenWAF Origin CA que lo firma.

Errores

EstadoDescripción
400Petición mal formada (bad_request).
403El rol o los límites del token no lo permiten (forbidden).
404No existe o el token no lo ve (not_found).
409zone_merged: la zona está fusionada en otra (solo lectura hasta que se separe o se purgue).
422Error de validación (invalid) o motivo ausente/no válido (reason_required).
503unavailable: la Origin CA no está disponible ahora.

Ejemplo

curl -X POST "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/origin-certs" \
  -H "Authorization: Bearer $OPENWAF_TOKEN" \
  -H "X-Change-Reason: Origin certificate for the web servers" \
  -H "Content-Type: application/json" \
  --data '{
    "hostnames": [
      "example.com",
      "*.example.com"
    ],
    "key_type": "ecdsa_p256",
    "validity_days": 5475
  }'
200
{
  "dry_run": false,
  "certificate": {
    "id": "a5614527-0ce6-43be-ad1d-d012b7394867",
    "zone_id": "6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d",
    "hostnames": [
      "example.com",
      "*.example.com"
    ],
    "key_type": "ecdsa_p256",
    "serial": "5f3a9c0e7b21d4a68c13e9f02b7d4a61",
    "fingerprint_sha256": "example",
    "not_before": "2026-10-27T09:30:00Z",
    "not_after": "2026-10-27T09:30:00Z",
    "validity_days": 0,
    "status": "active",
    "created_by": "token:11111111-2222-4333-8444-555555555555",
    "created_at": "2026-10-27T09:30:00Z",
    "revoked_at": "2026-10-27T09:30:00Z",
    "revoked_by": null
  },
  "certificate_pem": "example",
  "private_key_pem": "example",
  "ca_pem": "example"
}

Revocar un certificado de origen

DELETE /v1/orgs/{org}/zones/{zone}/origin-certs/{cert}

Revoca un certificado de origen. Los nodos del borde lo rechazan en modo full_strict desde su siguiente configuración, así que un origen que aún lo sirva recibe errores 526. Revocarlo otra vez no cambia nada. Con dry_run=1 solo se devuelve el certificado.

Rol necesario: tech o superior.

Controles de cambio: dry_run · X-Change-Reason (opcional)

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).
zonerutastring (uuid)SíId de la zona (consulta Listar zonas).
certrutastring (uuid)SíId del certificado.
X-Change-ReasoncabecerastringNoMotivo del cambio (1-500 caracteres UTF-8, sin caracteres de control); por defecto, el alta de la zona. De 1 a 500 caracteres.
dry_runconsultastringNo1/true simula el cambio: responde 200 con el plan (Applied) y no guarda nada. Admite 0/false; otro valor: 400. Uno de 1, true, 0, false.

Respuesta

  • 200: El certificado (revocado). Devuelve OriginCert.
CampoTipoDescripción
idstring (uuid)Id.
zone_idstring (uuid)Id de la zona.
hostnamesarray de string
key_typestringcsr: se certificó la clave pública de una petición. Uno de ecdsa_p256, rsa2048, csr.
serialstringHexadecimal en minúsculas sin ceros a la izquierda.
fingerprint_sha256stringHuella SHA-256 del certificado.
not_beforestring (date-time)Inicio de la validez.
not_afterstring (date-time)Fin de la validez.
validity_daysinteger
statusstringrevoked gana a expired. Uno de active, revoked, expired.
created_bystringQuién lo creó (actor).
created_atstring (date-time)Fecha de creación.
revoked_atstring (date-time) o nullFecha de revocación (null si está activo).
revoked_bystring o nullQuién lo revocó.

Errores

EstadoDescripción
403El rol o los límites del token no lo permiten (forbidden).
404No existe o el token no lo ve (not_found).

Ejemplo

curl -X DELETE "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/origin-certs/9e7c5a3b-1d2f-4e8a-b6c4-3a5d7f9b1c2e" \
  -H "Authorization: Bearer $OPENWAF_TOKEN" \
  -H "X-Change-Reason: Server decommissioned"
200
{
  "id": "a5614527-0ce6-43be-ad1d-d012b7394867",
  "zone_id": "6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d",
  "hostnames": [
    "example.com",
    "*.example.com"
  ],
  "key_type": "ecdsa_p256",
  "serial": "5f3a9c0e7b21d4a68c13e9f02b7d4a61",
  "fingerprint_sha256": "example",
  "not_before": "2026-10-27T09:30:00Z",
  "not_after": "2026-10-27T09:30:00Z",
  "validity_days": 0,
  "status": "active",
  "created_by": "token:11111111-2222-4333-8444-555555555555",
  "created_at": "2026-10-27T09:30:00Z",
  "revoked_at": "2026-10-27T09:30:00Z",
  "revoked_by": null
}

Ver el estado del TLS al origen

GET /v1/orgs/{org}/zones/{zone}/origin-tls/status

Para cada nombre con proxy, devuelve sus ajustes efectivos de TLS al origen, lo que muestra un handshake TLS con el origen (sin petición HTTP; las direcciones privadas, de loopback y de enlace local quedan skipped) y los errores 525/526 que ha notificado el borde en las últimas 24 horas. El resultado se guarda 60 segundos por zona.

Rol necesario: readonly o superior.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).
zonerutastring (uuid)SíId de la zona (consulta Listar zonas).

Respuesta

CampoTipoDescripción
checked_atstring (date-time)Última comprobación.
hostsarray de object
hosts[].hoststring
hosts[].upstream_urlstringSin credenciales.
hosts[].tls_verifystringUno de full, full_strict.
hosts[].server_namestringConfigurado (vacío = el de siempre).
hosts[].client_certboolean
hosts[].effective_server_namestringSNI y nombre verificado: server_name, o el host del origen si es un nombre, o el del sitio si es una IP.
hosts[].probeobject
hosts[].edge_errors_24hintegerEventos 525/526 del borde en las últimas 24 h.
hosts[].last_edge_errorobject o null

Errores

EstadoDescripción
404No existe o el token no lo ve (not_found).

Ejemplo

curl "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/origin-tls/status" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
{
  "checked_at": "2026-10-27T09:30:00Z",
  "hosts": [
    {
      "host": "www.example.com",
      "upstream_url": "https://203.0.113.10",
      "tls_verify": "full",
      "server_name": "",
      "client_cert": false,
      "effective_server_name": "example",
      "probe": {
        "state": "ok",
        "error": "",
        "issuer": "example",
        "subject": "example",
        "not_after": "2026-10-27T09:30:00Z",
        "days_left": 0,
        "name_match": false,
        "trusted_by": "public",
        "requests_client_cert": false
      },
      "edge_errors_24h": 0,
      "last_edge_error": {
        "ts": "2026-10-27T09:30:00Z",
        "status": 525,
        "msg": ""
      }
    }
  ]
}

Descargar la Origin CA

GET /v1/origin-tls/origin-ca.pem

Devuelve, en PEM, todos los certificados no caducados de la OpenWAF Origin CA (varios durante una rotación). En modo full_strict el borde confía en estos certificados además de en las raíces públicas.

Rol necesario: Ninguno: público, sin token.

Respuesta

  • 200: Cuerpo de tipo text/plain.

Errores

EstadoDescripción
503unavailable: la Origin CA no está disponible ahora.

Ejemplo

curl "https://dash.openwaf.dev/v1/origin-tls/origin-ca.pem"
200
-----BEGIN CERTIFICATE-----
MIIB…
-----END CERTIFICATE-----

Descargar la CA de cliente del borde

GET /v1/origin-tls/edge-client-ca.pem

Devuelve, en PEM, la CA de los certificados de cliente que el borde presenta a los orígenes (mTLS). Configúrala en un origen que exija el certificado del borde.

Rol necesario: Ninguno: público, sin token.

Respuesta

  • 200: Cuerpo de tipo text/plain.

Errores

EstadoDescripción
503unavailable: la Origin CA no está disponible ahora.

Ejemplo

curl "https://dash.openwaf.dev/v1/origin-tls/edge-client-ca.pem"
200
-----BEGIN CERTIFICATE-----
MIIB…
-----END CERTIFICATE-----

Última actualización:

↑↓ para moverte↵ para abriresc para cerrar