Integrar la firma electrónica en software a medida consiste en que tu aplicación envíe el documento por API a un prestador de servicios de confianza y guarde la versión firmada con sus evidencias. El Reglamento (UE) 910/2014, conocido como eIDAS y modificado por el Reglamento (UE) 2024/1183, distingue tres niveles de firma con efectos jurídicos distintos. Es parte de un proyecto de software a medida con Codezone.
Mientras un contrato se imprime y se escanea para firmarlo, la venta espera. El riesgo llega después: si el cliente niega haber firmado, una firma sin evidencias obliga a demostrar su autenticidad y un servicio cualificado parte de una presunción legal.
Al terminar sabrás qué tipo de firma pide cada documento y qué evidencias guardar, también cuando se firma desde un portal de clientes privado con acceso seguro.
Qué es la firma electrónica según el Reglamento eIDAS
La firma electrónica, según el artículo 3.10 del Reglamento (UE) 910/2014, son los datos en formato electrónico anejos a otros datos electrónicos, o asociados de manera lógica con ellos, que utiliza el firmante para firmar. El reglamento la gradúa así:
- Firma electrónica simple: cualquier dato electrónico asociado al documento, como un trazo en pantalla o una casilla de aceptación. Encaja, por ejemplo, en la conformidad con un parte de un software SAT a medida para servicio técnico.
- Firma electrónica avanzada: cumple los requisitos del artículo 26: está vinculada al firmante de manera única, permite identificarlo, se crea con datos que controla en exclusiva y detecta cualquier cambio posterior.
- Firma electrónica cualificada: una firma avanzada creada con un dispositivo cualificado de creación de firmas y basada en un certificado cualificado de firma electrónica (artículo 3.12).
Qué validez tiene cada tipo de firma electrónica en un juicio
Ninguna firma electrónica pierde efectos jurídicos ni admisibilidad como prueba por no ser cualificada (artículo 25.1 del eIDAS), pero solo la cualificada equivale a la firma manuscrita (artículo 25.2), según el texto consolidado del Reglamento eIDAS en EUR-Lex.
En España, la Ley 6/2020 (artículo 3.2) remite al artículo 326 de la Ley de Enjuiciamiento Civil. Con un servicio no cualificado, si se impugna el documento, quien lo aporta prueba su autenticidad. Con uno cualificado cuyo prestador figuraba en la lista de confianza en el momento relevante, se presume correcto (artículo 326.4). Compruébalo en la lista de confianza de prestadores de la Comisión Europea antes de contratar.
Cómo se integra un proveedor de firma electrónica por API
Un proveedor de firma electrónica por API se integra en cinco pasos que controla tu backend:
- Solicitud: el backend sube el PDF e indica los firmantes y el método de identificación.
- Firma: el firmante recibe un enlace o firma dentro de tu propia web.
- Webhook: el proveedor comunica cada cambio de estado y tu servidor verifica que la llamada es auténtica.
- Descarga: el documento firmado y el informe de evidencias se guardan también en tu almacenamiento.
- Registro: la huella SHA-256 del documento queda asociada al expediente y al usuario que lanzó la firma.
Antes de elegir entre proveedores como DocuSign o Signaturit, comprueba qué nivel de firma ofrece cada producto. El paso del presupuesto aceptado al contrato ya lo resuelve la automatización de presupuestos, contratos y facturas en web.
Qué firma electrónica elegir para cada documento
El nivel de firma electrónica depende de lo que tengas que probar si el documento se discute:
- Simple: aceptación de condiciones o conformidad con un trabajo, guardando el documento aceptado con su fecha y hora. También cierra un ticket de incidencia con SLA pactado.
- Avanzada: contratos y presupuestos firmados a distancia, donde necesitas identificar al firmante y detectar cambios, como el mandato de adeudo SEPA firmado en la web.
- Cualificada: cuando una norma exige un efecto equivalente a la firma manuscrita o el importe justifica la presunción legal; el firmante necesita un certificado cualificado.
En un software para despachos con control de expedientes en Madrid, cada firma queda ligada al expediente y a quien la pidió. Como el firmante deja datos personales, aplica el RGPD al módulo de firma desde el diseño.
El Reglamento (UE) 2024/1183 añade la cartera europea de identidad digital: cada Estado miembro ofrecerá al menos una en los 24 meses siguientes a la entrada en vigor de sus actos de ejecución, con firma cualificada gratuita por defecto para las personas físicas, que cada Estado puede limitar a fines no profesionales (artículo 5 bis). Deja el proveedor detrás de una interfaz propia para añadir ese canal sin rehacer el módulo.
CodeZone Pro Tip: verifica que el webhook del proveedor de firma es auténtico y guarda una sola vez la huella del documento firmado como evidencia.
const crypto = require("node:crypto");
// Cabecera, algoritmo y campos del evento los fija cada proveedor en su documentación;
// aquí se asume HMAC-SHA256 en base64
const SECRETO = process.env.FIRMA_WEBHOOK_SECRET || "solo-para-pruebas";
const procesados = new Set(); // en producción, una tabla con índice único por id de evento
function webhookAutentico(cuerpoCrudo, firmaRecibida) {
// Se firma el cuerpo tal como llega: si lo parseas y lo serializas de nuevo, no coincide
const esperada = crypto.createHmac("sha256", SECRETO).update(cuerpoCrudo).digest();
const recibida = Buffer.from(firmaRecibida || "", "base64");
// timingSafeEqual no revela por el tiempo de respuesta cuántos bytes acertó un atacante
return recibida.length === esperada.length && crypto.timingSafeEqual(recibida, esperada);
}
const sha256 = (datos) => crypto.createHash("sha256").update(datos).digest("hex");
function registrarEvidencia(cuerpoCrudo, firmaRecibida, pdfFirmado) {
if (!webhookAutentico(cuerpoCrudo, firmaRecibida)) throw new Error("Webhook no auténtico");
const evento = JSON.parse(cuerpoCrudo.toString("utf8"));
if (procesados.has(evento.id)) return null; // el proveedor reintenta: no dupliques evidencias
procesados.add(evento.id);
return {
evento: evento.id,
estado: evento.status,
recibidoEn: new Date().toISOString(),
huellaDocumento: sha256(pdfFirmado), // demuestra que el PDF guardado no cambió después
huellaWebhook: sha256(cuerpoCrudo),
};
}
// Prueba local con un evento de ejemplo firmado con el mismo secreto
const cuerpo = Buffer.from(JSON.stringify({ id: "evt_demo_1", status: "completed" }));
const firma = crypto.createHmac("sha256", SECRETO).update(cuerpo).digest("base64");
console.log(registrarEvidencia(cuerpo, firma, Buffer.from("%PDF-1.7 ejemplo")));Con esta verificación nadie marca un contrato como firmado llamando a tu endpoint, y la huella demuestra en una disputa que el PDF archivado es el que devolvió el proveedor.
Lo Que Arriesgas con una Firma Sin Evidencias
Una firma electrónica vale lo que puedas demostrar de ella. Si el documento firmado y el informe de evidencias viven solo en la cuenta del proveedor, cambiar de proveedor o cerrar la cuenta te deja sin prueba.
En Codezone integramos la firma electrónica por API y dejamos las evidencias en tu infraestructura. Dinos qué documentos firma hoy tu equipo en papel y te decimos qué nivel de firma necesita cada uno.