Configura y opera el DMS
Define registro, autenticación por operación, emisión, renovación y confianza distribuida.
Un Device Management Service (DMS) configura la admisión y el ciclo de identidad de sus dispositivos. Actúa como autoridad de registro; la CA indicada en Enrollment CA firma los certificados. Esta guía se dirige a quien administra esa política.
Antes de empezar
Necesitas permisos para gestionar DMS, una CA activa con clave utilizable y un perfil de emisión probado. Acuerda con el integrador ID del dispositivo, credencial inicial, consumidor y ventana de renovación. Revisa la estrategia de aprovisionamiento antes de elegir registro y sustitución.
Prepara confianza del servidor EST y acceso desde el dispositivo con Despliegue. La autenticación administrativa de tu operador no sustituye la autenticación EST del dispositivo.
Configura un DMS
Identifica la flota
Crea el DMS con un nombre reconocible y conserva su ID. Las URLs EST utilizan ese identificador, no el nombre visible. Cada dispositivo conserva un DMS propietario.
Selecciona la CA de enrolamiento
Elige Enrollment CA y un perfil explícito apropiado para la identidad final. Mantén CN compatible con Device ID. El certificado de prueba debe permitir el uso previsto y terminar dentro de la vigencia del emisor.
Configura EST
Selecciona registro y autenticación del primer enrolamiento. Configura por separado la autenticación de reenrolamiento, sus umbrales y la retirada del certificado anterior. Deja ServerKeyGen deshabilitado si el cliente genera su clave.
Distribuye la confianza
Selecciona los certificados que devolverá /cacerts. Incluye explícitamente las intermedias y raíces necesarias, sin confundir distribución con instalación automática de confianza.
Verifica los endpoints
Guarda y vuelve a leer la configuración. Consulta /cacerts, realiza un enrolamiento permitido y otro rechazado, y comprueba dispositivo, serie e historial. Crear el DMS o descargar cacerts no demuestra que autenticación y emisión funcionen.
Configuración de enrollment
Enrollment Device Registration
settings.enrollment_settings.registration_mode permite JITP o PRE_REGISTRATION. En JITP se crea el dispositivo desconocido con el CN de la CSR como ID y el DMS como propietario. El device_provisioning_profile aporta etiquetas, metadatos e icono a ese alta.
En PRE_REGISTRATION, el ID debe existir previamente. En el código examinado, un dispositivo existente pasa antes por el control de sustitución, incluso si no tiene identidad. Consulta las condiciones de prerregistro antes de utilizar este modo.
Enrollment Settings
Campo de settings.enrollment_settings | Decisión |
|---|---|
protocol | EST_RFC7030 para estas operaciones. |
enrollment_ca | ID de la CA que firmará. |
verify_csr_signature | Mantén true para comprobar posesión de la clave de la CSR. |
enable_replaceable_enrollment | Permite /simpleenroll para un ID existente del mismo DMS. Puede intentar revocar el anterior incluso si falla una fase posterior; no es un cambio atómico. |
est_rfc7030_settings.auth_mode | Uno de los cuatro modos de autenticación. |
Si el ID pertenece a otro DMS, el enrolamiento inicial se rechaza. No actives sustitución como respuesta automática a un error; el diagnóstico distingue ID repetido, propiedad y cambios parciales.
Autenticación por operación
Los bloques son independientes:
settings.enrollment_settings.est_rfc7030_settingspara/simpleenrolly/serverkeygen.settings.reenrollment_settings.est_rfc7030_settingspara/simplereenroll.
auth_mode | Control aplicado en la operación configurada |
|---|---|
CLIENT_CERTIFICATE | Validación del certificado presentado. |
EXTERNAL_WEBHOOK | Autorización del webhook configurado. |
CLIENT_CERTIFICATE_AND_EXTERNAL_WEBHOOK | Validación del certificado y, después, aprobación del webhook. |
NO_AUTH | Sin autenticación del solicitante por el DMS. |
Webhook y modo combinado también se ejecutan en reenrolamiento si se configuran en su bloque. No hay una degradación implícita a NO_AUTH en esos casos. Un modo ausente o no reconocido falla.
Para mTLS inicial, client_certificate_settings contiene validation_cas, allow_expired y chain_level_validation. El flujo examinado recibe una credencial de certificado, no garantiza transportar todas las intermedias del handshake al validador. Para el caso directo, configura como CA de validación el emisor directo del bootstrap y prueba la ruta real del Gateway.
En el reenrolamiento con certificado, el validador prueba primero la CA de enrolamiento y después las CAs listadas en reenrollment_settings.est_rfc7030_settings.client_certificate_settings.validation_cas; esas son las CAs de validación de reenrolamiento. Esa lista es opcional porque la CA de enrolamiento siempre es confiable en el reenrolamiento, y cada bloque de ajustes consulta solo su propia validation_cas. Las CAs presentes solo en la validation_cas del bloque inicial no amplían la aceptación en reenrolamiento; durante una rotación de CAs, añade la CA de emisión anterior a la lista del bloque de reenrolamiento. El validador de reenrolamiento compara la hoja TLS presentada con esas CAs; los valores chain_level_validation y allow_expired del bloque de reenrolamiento se almacenan pero no se consultan, y el vencimiento lo rige enable_expired_renewal.
Para el webhook, configura destino, autenticación de Lamassu hacia ese servicio, método y timeout. El contrato de autenticación explica la credencial del dispositivo y el cuerpo de la llamada. NO_AUTH no acredita propiedad del ID solicitado.
Ajustes del webhook externo
Los modos de autenticación por webhook leen external_webhook_settings en el mismo bloque est_rfc7030_settings:
Campo de external_webhook_settings | Decisión |
|---|---|
url | URL absoluta http o https del receptor. Debe ser la URL final; no se siguen redirecciones. |
method | POST o PUT; POST por defecto. |
name | Etiqueta usada en los logs del servicio. |
config.auth_mode | noauth, apikey, jwt o mtls. Un valor ausente o desconocido se comporta como noauth. |
config.log_level | Nivel de log de la llamada del webhook: debug, info, warn o error; info por defecto. |
config.apikey_options | Obligatorios para apikey: header y key. Los nombres de cabecera reservados se rechazan. |
config.jwt_options | Obligatorios para jwt: oidc_client_id, oidc_client_secret y un oidc_well_known absoluto http o https. |
config.mtls_options | Obligatorios para mtls: cert_content y key_content como PEM codificado en Base64, como el resto de certificados de la API; también se acepta el PEM en claro. |
config.insecure_skip_verify | Con true, omite la verificación del certificado del receptor. Por defecto se verifica. A diferencia de los canales de alertas, este ajuste se respeta aquí. |
config.call_timeout | Duración máxima de la llamada de autorización (por ejemplo 10s); 10 segundos por defecto. |
Reglas de esa configuración:
- Crear o actualizar un DMS cuyo
auth_modede enrolamiento o reenrolamiento use el webhook valida el bloque y devuelve HTTP 400 — el cuerpo empieza porstruct validation error:y continúa coninvalid enrollment external webhook configoinvalid reenrollment external webhook config— cuando la URL, el método o las opciones no son válidos. Eso incluye un parmtls_options.cert_content/key_contentque no se corresponde con un certificado y una clave privada coincidentes. Las referencias a archivos (ca_cert_file,mtls_options.cert_file,mtls_options.key_file) siempre son inválidas: el servicio no lee archivos, así que introduce el certificado y la clave como PEM codificado en Base64 enmtls_options.cert_contentykey_content, o como PEM en claro. - Un
apikey_options.headerpropio no puede usar nombres en los que la plataforma o el servicio receptor confían — por ejemploX-Principal-Id,X-Request-Id,Host,Content-TypeoForwarded— y ningún nombre puede empezar porX-Forwarded-,X-Envoy-oX-Lms-(sin distinguir mayúsculas). La referencia de la API DMS documenta los esquemasWebhookCallyWebhookCallHttpClienty que las cabeceras API-key reservadas se rechazan. - La clave anidada
http_clientexiste solo en las configuraciones de canales de alertas; en un cuerpo de DMS se ignora. La clave de DMS esexternal_webhook_settings.config. - Un cuerpo con
config.auth_modeestablecido aapikey,jwtomtlsdebe llevar su bloque de opciones correspondiente (apikey_options,jwt_optionsomtls_options) — y nada más. Los cuerpos con esos modos de autenticación que solo contenganapikey,oidcomtlsfallan la validación con 400, yvalidate_server_certsiempre se ignora: usainsecure_skip_verify. Solo se aceptan comonoauthlos cuerpos sin bloques de opciones, y sus credenciales se descartan. - La respuesta de autorización debe ser JSON de como máximo 1 MiB; un cuerpo mayor hace fallar la llamada.
Credenciales sobre http://
Si hay credenciales configuradas, se envían sea cual sea el esquema de la URL: un webhook http:// recibe la API key o el bearer token en claro, y mTLS no tiene efecto porque no hay handshake TLS, así que el certificado de cliente nunca se presenta. Usa preferentemente https:// en url, en oidc_well_known y en el endpoint de token que este anuncia.
La autenticación inicial y los ajustes de renovación se almacenan por separado. Si un DMS solo tiene el bloque de autenticación inicial, la renovación lo reutiliza: lee ambos bloques antes de editar. La consola expone editores independientes para la autenticación de enrolamiento y de reenrolamiento, con los mismos campos Log Level, Call Timeout, HTTP Authentication y credenciales que los canales webhook, además de un interruptor Skip TLS Verification (desactivado por defecto, así que la verificación permanece activa; la consola avisa cuando lo activas).
Las credenciales del webhook deben almacenarse como contenido PEM. Las referencias a archivos (ca_cert_file, mtls_options.cert_file, mtls_options.key_file) nunca son válidas en una configuración de webhook almacenada: la entrega rechaza cualquier configuración de webhook que haga referencia a archivos, sea cual sea su modo de autenticación, por lo que todos los enroll y reenroll que llaman a ese webhook fallan hasta que el certificado y la clave se introduzcan como contenido PEM, en Base64 o plano, en mtls_options.cert_content y key_content, o se eliminen los campos de archivo si el webhook no usa mTLS. Si una configuración almacenada guarda rutas de archivos en mtls_options.cert_content o key_content, toda actualización completa de ajustes (POST /v1/dms, PUT /v1/dms/:id) falla la validación — los ajustes se sustituyen al completo, así que la configuración almacenada debe reenviarse — hasta que esos valores se sustituyan por contenido PEM o el webhook deje de usarse. Mientras tanto, la entrega de ese webhook falla en cada llamada; una actualización solo de metadatos mediante PUT o PATCH en /v1/dms/:id/metadata sigue funcionando. Para corregirlo en la consola, abre el DMS, sustituye cualquier valor de ruta de fichero por contenido PEM — el editor rechaza las rutas de fichero con un error en el propio campo — y guarda. Al guardar se reescribe external_webhook_settings.config con las claves actuales, y la consola lee tanto el PEM sin codificar como el codificado en Base64 de las configuraciones migradas, y almacena el material codificado en Base64. Si tu configuración almacenada se apoyaba antes en validate_server_cert: false, ahora lleva insecure_skip_verify: true: la verificación del certificado del receptor sigue sin realizarse hasta que pongas ese flag a false. Consulta 3.8.0 a 4.0.0 para las notas de actualización y la lista de verificación del operador.
El conjunto de confianza del reenrolamiento vive en reenrollment_settings.est_rfc7030_settings.client_certificate_settings.validation_cas. El campo plano reenrollment_settings.additional_validation_cas no forma parte de la API: los cuerpos que lo contienen se aceptan, pero su valor se ignora en silencio — los campos JSON desconocidos se descartan — y las respuestas GET no lo incluyen. Lee el DMS antes de enviar ediciones por API: un cuerpo de actualización construido con ese campo plano vacía en silencio validation_cas.
Perfil de emisión
settings.issuance_profile_id tiene precedencia sobre settings.issuance_profile; si ninguno existe, se utiliza el perfil predeterminado de la CA. Las reglas se documentan una sola vez en Perfiles. Cambiar un DMS afecta a solicitudes futuras; no modifica certificados ya firmados ni instala confianza en clientes.
Configuración de re-enrollment
Campo de settings.reenrollment_settings | Función |
|---|---|
reenrollment_delta | La ventana abre en NotAfter del certificado activo menos este delta. |
preventive_delta | Umbral operativo preventivo de monitorización. |
critical_delta | Umbral operativo crítico de monitorización. |
enable_expired_renewal | Aceptación de un certificado presentado vencido en el validador mTLS de renovación. No autoriza por sí solo otro modo ni elimina restricciones del Gateway. |
est_rfc7030_settings.client_certificate_settings.validation_cas | CAs de validación de reenrolamiento para la credencial mTLS de renovación, probadas después de la CA de enrolamiento; opcional, porque la CA de enrolamiento siempre es confiable. Suelen poblarse durante la rotación de CAs mientras las cohortes con certificados antiguos se renuevan. |
revoke_on_reenrollment | Si el certificado anterior está ACTIVE, intenta revocarlo con Superseded antes de vincular el sucesor. |
Monitorizar no renueva: el cliente debe programar la solicitud y la instalación. En modos webhook o NO_AUTH, la política de credencial vencida no pasa por el mismo validador mTLS; el webhook debe autorizar explícitamente la recuperación que admita. Revisa Renovación y recuperación para orden de operaciones y fallos parciales.
ServerKeyGen
settings.server_keygen_settings.enabled habilita generación software en el servidor. La consola lo expone mediante un interruptor Enable server-side key generation y una selección de Key type: ECDSA P-256, P-384 o P-521, o RSA de 2048, 3072 o 4096 bits; los valores predeterminados son P-256 para ECDSA y 4096 bits para RSA. Algoritmo y tamaño proceden de su campo key, que se guarda como {type,bits} donde P-256, P-384 y P-521 equivalen a bits 256, 384 y 521; key se omite cuando está deshabilitado. El perfil de emisión debe permitirlos. La respuesta contiene una clave PKCS#8 sin cifrar dentro de TLS, además del certificado. Consulta formato y extracción en Referencia EST.
Distribución de confianza
| Opción | Qué publica |
|---|---|
| Include Lamassu System CA | Certificado TLS downstream disponible; puede ser una hoja, no una CA de emisión. |
| Include Enrollment CA | Certificado de la CA emisora seleccionada. |
| Managed CAs | Certificados de las CAs elegidas explícitamente. |
No se añaden todos los ascendientes automáticamente. La distribución de confianza distingue raíces confiables, intermedias y confianza inicial del servidor.
Opera el inventario de DMS
Edit cambia nombre, ajustes y metadatos. La actualización del backend sustituye esos bloques completos; al usar la API, lee el DMS antes de enviar una edición para no perder campos.
Go to DMS owned devices limita el inventario al propietario. Show/Edit Metadata contiene datos operativos y de integraciones; consulta su guía antes de alterarlos. EST (RFC-7030) ayuda a localizar las URLs.
Delete elimina el registro y la configuración del DMS; no realiza por sí solo una cascada de revocación sobre todos sus dispositivos y certificados. Migra dependencias y conserva las referencias de auditoría antes de retirarlo.
Integra los dispositivos
Continúa con Cliente EST o el tutorial de enrolamiento y mTLS. La Referencia EST recoge formatos; Diagnóstico recoge fallos.