Manejo de certificados

Guía de certificados para integradores externos

Este documento resume el flujo de certificados digitales en la API de empresas. =

Endpoints relevantes

  • POST /api/v1/empresa/importarCertificado
  • POST /api/v1/empresa/crear
  • POST /api/v1/empresa/actualizar
  • GET /api/v1/empresa/{id}/certificados (historial)
  • POST /api/v1/empresa/asignarCertificado

Flujo típico

  1. Importar certificado (sin asignar)

    • Llamar a POST /api/v1/empresa/importarCertificado con multipart/form-data:
      • rut (RUT numérico de la empresa, sin dígito verificador “RUC”)
      • clave (password del .p12/.pfx)
      • certificado (archivo PKCS#12, MIME application/x-pkcs12)
    • Validaciones: formato p12/pfx, clave presente, el certificado debe estar emitido para RUC{rut} y no estar vencido.
    • Si pasa validaciones, se guarda y responde { "Res": "OK", "IdCert": <id> }.
    • Si ya existe el mismo SerialNumberHex sin empresa asignada, devuelve su IdCert sin reimportar. Si el serial ya está ligado a otra empresa, rechaza.
  2. Crear empresa con certificado importado

    • Primero importar (paso 1) y guardar el IdCert.
    • Llamar a POST /api/v1/empresa/crear con los datos de la empresa y idCertificado=<IdCert>.
    • El backend valida nuevamente RUT/vigencia y asigna el certificado a la empresa. Los campos de atajo de la empresa (UriCertificadoClaveCertificadoVencimientoCertificado) quedan apuntando a ese certificado.
  3. Crear empresa cargando certificado nuevo en el mismo request

    • En POST /api/v1/empresa/crear, enviar multipart/form-data con:
      • Campos de empresa
      • certificado (p12/pfx) y claveCertificado
    • El backend valida RUT/vigencia, mueve el archivo a almacenamiento y crea el registro de certificado asignándolo a la empresa.
  4. Actualizar empresa y rotar certificado

    • Opción A: importar antes (importarCertificado) y luego POST /api/v1/empresa/actualizar con idEmpresa e idCertificado.
    • Opción B: enviar un nuevo certificado + claveCertificado en el mismo actualizar.
    • En ambos casos se valida RUT/vigencia y se actualizan los campos de atajo de la empresa al certificado elegido.
  5. Listar historial de certificados

    • GET /api/v1/empresa/{id}/certificados devuelve todos los certificados asociados a la empresa, ordenados por vencimiento descendente, con datos básicos (emisor, sujeto, serial, vencimiento).
  6. Asignar un certificado importado existente

    • POST /api/v1/empresa/asignarCertificado con idEmpresa e idCertificado.
    • Valida RUT/vigencia y marca el certificado como perteneciente a la empresa, actualizando los campos de atajo de la empresa.

Reglas y consideraciones

  • Formato: solo .p12/.pfx (application/x-pkcs12).
  • Clave requerida: el password del PKCS#12 es obligatorio en importación/carga.
  • Validación de identidad: el Subject del certificado debe contener serialNumber = RUC{rut} de la empresa.
  • Vigencia: se rechaza si la fecha actual es mayor o igual a la fecha de vencimiento del certificado.
  • Duplicados: si se intenta importar un certificado con SerialNumberHex ya asignado a otra empresa, se rechaza. Si existe sin asignar, se reutiliza.
  • Certificado “activo”: la empresa mantiene un puntero de uso (UriCertificado/ClaveCertificado/VencimientoCertificado) que apunta al último certificado asignado mediante crear/actualizar/asignar. Los certificados previos permanecen en el historial pero no se usan mientras no se reasignen.

Ejemplos de request

Importar certificado

POST /api/v1/empresa/importarCertificado
Content-Type: multipart/form-data

rut=123456789012
clave=MiPassword
[email protected];type=application/x-pkcs12

Crear empresa usando certificado importado

POST /api/v1/empresa/crear
Content-Type: application/x-www-form-urlencoded

rut=123456789012
razonSocial=ACME SA
nombreFantasia=ACME
...otros campos...
idCertificado=42

Asignar certificado ya importado

POST /api/v1/empresa/asignarCertificado
Content-Type: application/x-www-form-urlencoded

idEmpresa=10
idCertificado=42