IRONSOFTWAREHOME

Firma electrónica de PDF en C# para eIDAS QES, FNMT-RCM y flujos españoles

Curtis Chau
Curtis Chau
Updated: 4 de junio de 2026

La firma electrónica de documentos PDF en C# .NET se sitúa, en el contexto español, sobre el marco común europeo eIDAS (Reglamento UE 910/2014) — que define tres niveles de firma (simple, avanzada y cualificada / QES) y obliga a los Estados miembros a reconocer recíprocamente las firmas emitidas con certificados de Prestadores Cualificados de Servicios de Confianza (QTSP) inscritos en la lista nacional. El ecosistema ibérico de Autoridades de Certificación está dominado por la FNMT-RCM (Fábrica Nacional de Moneda y Timbre — Real Casa de la Moneda), con AC Camerfirma y IZENPE (foral vasca) como alternativas frecuentes. La firma cualificada — exigible en flujos como Crea y Crece B2B, FACe B2G y la cadena XAdES de TicketBAI — requiere además un dispositivo cualificado de creación de firma (QSCD): habitualmente un HSM o tarjeta criptográfica. IronPDF cubre la firma PAdES sobre el PDF visualizable y la integración con HSM vía PKCS#11, dejando la firma XAdES del XML estructurado a las bibliotecas especializadas.

TL;DR: Guía rápida de firma electrónica para flujos españoles

Este tutorial cubre la firma criptográfica de PDFs con C#, anclado en el marco eIDAS y en los flujos españoles de firma electrónica (FACe, Crea y Crece, TicketBAI, VeriFactu, expedientes administrativos bajo ENI).

  • A quién va dirigido: Desarrolladores .NET que construyen sistemas que firman PDFs con certificado cualificado en el contexto ibérico — software de facturación bajo VeriFactu, ERPs que envían a FACe, gestores documentales del sector público bajo Esquema Nacional de Interoperabilidad, integradores que firman PDFs para clientes con HSM corporativos.
  • Qué construirá: Firma PAdES básica con certificado FNMT-RCM (.pfx/.p12), firmas avanzadas (AES) y cualificadas (QES) con sello de tiempo de TSA-FNMT, firmas visuales y multi-firma secuencial para flujos de aprobación, verificación contra la lista nacional de QTSPs cualificados, firma con HSM/PKCS#11 para certificados cualificados con clave protegida en hardware.
  • Dónde se ejecuta: .NET 10, .NET 8 LTS, .NET Framework 4.6.2+ y .NET Standard 2.0. Diseño on-premise alineado con LOPDGDD/AEPD: la firma se realiza dentro del perímetro del integrador, sin enviar el documento ni la clave privada a servicios externos.
  • Cuándo aplicar este enfoque: Cuando deba emitir PDFs firmados conformes con eIDAS QES (Crea y Crece, FACe, contratos B2B regulados), cuando deba firmar la visualización de facturas VeriFactu (PAdES sobre el PDF que ve el cliente final), cuando integre HSM corporativo para certificado cualificado del emisor, o cuando construya un flujo multi-firma para expedientes administrativos del sector público español.
  • Por qué importa técnicamente: Las firmas criptográficas basadas en certificados X.509 cualificados eIDAS son legalmente equivalentes a la firma manuscrita en toda la UE. En el contexto ibérico, sin embargo, las imágenes de firmas visuales sin respaldo criptográfico no constituyen firma electrónica — son meras representaciones gráficas. La distinción es relevante porque la firma cualificada es exigible en cada vez más flujos (recepción Crea y Crece, expedientes administrativos electrónicos, contratos digitales con consumidores bajo LCGC).

Para seguir los ejemplos, consulte la guía rápida de instalación e instale IronPDF en su proyecto. Firma su primer PDF con pocas líneas de código:

  1. 1Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf

  2. 2Copie y ejecute este fragmento de código.

    var signature = new IronPdf.Signing.PdfSignature("certificado.pfx", "contraseña");
    IronPdf.PdfDocument.FromFile("documento.pdf").Sign(signature).SaveAs("firmado.pdf");
    C#
  3. 3Despliegue para probar en su entorno real

    Comienza a usar IronPDF en tu proyecto hoy mismo con una prueba gratuita
    arrow pointer

Para comenzar rápidamente, descargue el proyecto de trabajo completo con todos los ejemplos de código de este tutorial.

La descarga incluye un proyecto .NET totalmente configurado con un certificado de muestra y todos los ejemplos listos para compilar y ejecutar.

Una vez adquirida la licencia de IronPDF o iniciada la prueba de 30 días, registre la clave al arrancar el proceso.

IronPdf.License.LicenseKey = "KEY";

Start using IronPDF in your project today with a free trial.

Primer Paso:
arrow pointer
NuGetInstalar con NuGet

PM > Install-Package IronPdf

Install IronPDF by running the command above in the NuGet Package Manager Console, or search for the package in the NuGet Package Manager.
Tabla de contenido

Marco eIDAS y firma electrónica en España

El Reglamento (UE) 910/2014 — conocido como eIDAS (electronic IDentification, Authentication and trust Services) — es el marco normativo común europeo que regula la firma electrónica, los sellos electrónicos, los sellos de tiempo cualificados y los servicios de confianza. En España se aplica directamente; la Ley 6/2020 reguladora de determinados aspectos de los servicios electrónicos de confianza completa el marco con disposiciones nacionales sobre los prestadores cualificados y el régimen sancionador.

Tres niveles eIDAS: SES, AES y QES

eIDAS reconoce tres niveles de firma electrónica con consecuencias jurídicas distintas:

  • Firma electrónica simple (SES) — cualquier conjunto de datos asociado al documento que identifique al firmante (clic en un botón "acepto", una imagen de firma manuscrita, una marca de agua). No garantiza autenticidad criptográfica ni integridad. Suficiente para muchas operaciones B2C de bajo riesgo, pero NO equivale jurídicamente a una firma manuscrita.
  • Firma electrónica avanzada (AES) — firma vinculada únicamente al firmante, que permite identificarlo y se crea con datos de creación de firma bajo su control exclusivo. Implementada típicamente con certificado X.509 (PKI) cuya clave privada está bajo custodia del firmante. PAdES-B y PAdES-T cubren este nivel cuando se usa con certificado emitido por una CA reconocida no cualificada.
  • Firma electrónica cualificada (QES) — firma avanzada que adicionalmente se crea con un dispositivo cualificado de creación de firma (QSCD: HSM cualificado, tarjeta criptográfica certificada Common Criteria EAL4+) y se basa en un certificado cualificado emitido por un Prestador Cualificado de Servicios de Confianza (QTSP) inscrito en la lista nacional. Es la única firma que eIDAS reconoce automáticamente como equivalente jurídico a la firma manuscrita en toda la UE.

Para la mayoría de los flujos regulados españoles que exigen firma "con valor jurídico equivalente al manuscrito" — Crea y Crece B2B, FACe B2G, contratos del sector público, expedientes administrativos bajo ENI, factura cualificada SII — el nivel exigible es QES. La consecuencia operativa para el desarrollador: el certificado debe ser cualificado (CA inscrita en la lista nacional), la clave privada debe estar protegida en HSM o tarjeta criptográfica cualificada, y el flujo de firma debe acoplar correctamente IronPDF (PAdES sobre el PDF) con el componente de gestión de la clave en hardware.

Lista nacional de QTSPs y validación

La lista de prestadores cualificados de servicios de confianza se mantiene por la Secretaría de Estado de Digitalización y se publica en https://sede.serviciosmin.gob.es/Prestadores/. Cualquier certificado emitido por un QTSP de esta lista (o de la lista análoga de otro Estado miembro de la UE, bajo reconocimiento mutuo eIDAS) es válido para firma cualificada en flujos españoles. La lista incluye:

  • FNMT-RCM — emite certificados cualificados de persona física (CPF), de representante de persona jurídica, de empleado público, y certificados de sello electrónico para entidades.
  • AC Camerfirma — extensiva en el ámbito notarial, registral y empresarial.
  • IZENPE — autoridad de certificación del Gobierno Vasco; cobertura en territorio foral vasco.
  • Firma Profesional (Autoridad Pública de Certificación Española) — operada por consejo general de colegios profesionales.
  • AC Abogacía — gestionada por el Consejo General de la Abogacía Española, certificados específicos para profesionales del derecho.
  • DigiCert, GlobalSign, Sectigo y otros prestadores europeos — admisibles bajo el reconocimiento mutuo eIDAS si están cualificados en algún Estado miembro.

La validación de una firma PAdES recibida debe comprobar tres cosas: que el certificado del firmante encadena a una CA raíz incluida en la EU LOTL (List of Trusted Lists) o en la lista nacional española; que el sello de tiempo (si está presente) proviene también de un TSA cualificado; y que la información de revocación capturada en el momento de firma sigue siendo válida o, en su defecto, que el sello de archivado renovable mantiene intacta la cadena de confianza.

AutoFirma y herramientas oficiales

AutoFirma (administracionelectronica.gob.es/ctt/autofirma) es la aplicación oficial de la Administración General del Estado para firma electrónica desde el escritorio del ciudadano o del empleado público. Soporta CAdES, XAdES y PAdES, y es la referencia operativa más usada en flujos B2G donde el firmante actúa desde su propio puesto de trabajo (no en un servicio backend).

Para flujos backend — el caso que IronPDF cubre — AutoFirma no aplica. El integrador construye el flujo de firma directamente en .NET, accediendo al certificado almacenado en .pfx, en el almacén certificado de Windows, o en un HSM vía PKCS#11. AutoFirma es la herramienta de referencia para el lado humano del flujo; IronPDF es la herramienta de referencia para el lado automatizado.


Ecosistema español de Autoridades de Certificación

España no tiene un único monopolio de certificación cualificada — coexisten varias CAs con perfiles diferentes según el sector. La elección de CA depende del tipo de firmante (persona física, persona jurídica, empleado público, profesional) y del sector de uso (administración general, foral vasco, notarial, profesional).

FNMT-RCM: la CA dominante del sector público

La Fábrica Nacional de Moneda y Timbre — Real Casa de la Moneda (fnmt.es) opera la rama de certificación con mayor adopción en España. Su gama incluye:

  • Certificado de Persona Física (CPF) — certificado cualificado del ciudadano, instalable en navegador, tarjeta criptográfica o dispositivo Cl@ve.
  • Certificado de Representante de Persona Jurídica — para administradores únicos o solidarios actuando en nombre de la entidad.
  • Certificado de Empleado Público — para profesionales de la AGE, CCAA o entes locales actuando en su condición funcional. Habitualmente almacenado en tarjeta cualificada con PIN bajo norma Cl@ve.
  • Certificado de Entidad (sello electrónico) — para automatización: emite documentos firmados por la entidad sin intervención de persona física. Es el certificado que un ERP usa para firmar facturas en nombre de la empresa.
  • TSA-FNMT — TSA cualificada para sellos de tiempo, accesible en tsa.fnmt.es.

La FNMT-RCM publica los certificados raíz y CRLs en sede.fnmt.gob.es. La cadena de confianza FNMT está incluida en EU LOTL, las distribuciones de Mozilla, Apple y Microsoft, y en el almacén de certificados raíz por defecto de los principales sistemas operativos.

AC Camerfirma y Firma Profesional para empresa

AC Camerfirma (camerfirma.com) — operada por las Cámaras de Comercio españolas — tiene presencia significativa en el ámbito empresarial, notarial y registral. Emite certificados de representante legal, de apoderado, de pertenencia a empresa y de sello empresarial. Su cuota es relevante en empresas medianas y grandes que no han optado por FNMT-RCM por preferencia sectorial o por integración con cámaras de comercio.

Firma Profesional (firmaprofesional.com) — Autoridad Pública de Certificación operada por consejos generales de colegios profesionales (medicina, abogacía, ingeniería). Sus certificados están dirigidos a profesionales colegiados que firman documentos en su condición funcional. Casos de uso típicos: recetas médicas electrónicas firmadas por médico colegiado, dictámenes periciales firmados por ingeniero colegiado, escritos forenses firmados por abogado colegiado.

IZENPE en territorio foral vasco

IZENPE (izenpe.eus) — autoridad de certificación del Gobierno Vasco — emite certificados cualificados para ciudadanos vascos, empleados públicos de la administración foral, y entidades inscritas en territorio foral vasco. En flujos TicketBAI los certificados IZENPE conviven con los FNMT-RCM, pero IZENPE tiene presencia preferente en empresas y administraciones de Bizkaia, Gipuzkoa, Araba y Navarra (esta última usa también la propia autoridad foral correspondiente).

Para integradores de software que sirven al mercado vasco, conviene contemplar IZENPE como opción de certificado del lado del firmante; IronPDF acepta cualquier certificado X.509 conforme al estándar, con independencia de la CA emisora.


Firma PAdES sobre PDF en C# con IronPDF

PAdES (PDF Advanced Electronic Signatures, ETSI EN 319 142) es el perfil eIDAS de firma electrónica sobre documentos PDF. IronPDF firma PDFs en PAdES con cualquier certificado X.509 conforme — incluidos certificados cualificados FNMT-RCM, Camerfirma, IZENPE, y prestadores europeos reconocidos bajo eIDAS.

Formatos de certificado soportados (.pfx, .p12)

IronPDF trabaja con certificados en formato estándar PKCS#12, normalmente almacenados como archivos .pfx o .p12. Estos archivos agrupan la clave privada (necesaria para firmar) con el certificado público (necesario para verificar) en un único contenedor protegido por contraseña.

En el entorno español hay tres orígenes habituales de certificados:

  • Certificados emitidos por QTSP cualificado (FNMT-RCM, Camerfirma, IZENPE, Firma Profesional) — descargados del portal del prestador como .pfx con contraseña, o instalados en tarjeta criptográfica.
  • Certificados PKI internos — emitidos por la CA interna de la organización; útiles para firma interna (informes técnicos, documentos no externalizables) pero NO admisibles para firma cualificada eIDAS si la CA no está inscrita en la lista nacional.
  • Certificados autofirmados — útiles únicamente para desarrollo y pruebas; producirán advertencias en cualquier visor PDF.

Para cargar un certificado en IronPDF debe especificarse la opción X509KeyStorageFlags.Exportable, que permite al subsistema criptográfico acceder a la clave privada para firmar:

using System.Security.Cryptography.X509Certificates;

// Load the certificate from a PKCS#12 file (.pfx or .p12)
// The Exportable flag allows the private key to be used for signing
var certificate = new X509Certificate2(
    "company-signing-cert.pfx",
    "certificate-password",
    X509KeyStorageFlags.Exportable
);

Salida de ejemplo:

Certificate loaded successfully
  Subject: CN=Test Signer, O=Test Organization, C=US
  Issuer: CN=Test Signer, O=Test Organization, C=US
  Valid From: 2026-01-27 7:50:04 AM
  Valid To: 2027-01-27 8:00:03 AM
  Thumbprint: 41355DE5ADD66CD64B2B99FF2CF87B9C87BD412F
  Has Private Key: True
Text

En producción ibérica, la contraseña del certificado debe extraerse de un almacén seguro — Azure Key Vault, AWS Secrets Manager o HashiCorp Vault son habituales; en entornos sector público bajo ENS conviene usar la solución de gestión de claves homologada de la organización. Nunca incluya contraseñas de certificados en el control de versiones ni en archivos de configuración no cifrados — el régimen sancionador AEPD bajo LOPDGDD trata las claves privadas de firma como datos especialmente sensibles.

Firma PAdES básica con certificado FNMT-RCM

El flujo más simple — cargar un PDF, crear una firma desde un certificado FNMT-RCM, guardar el resultado firmado — se cubre con tres líneas de IronPDF. La biblioteca gestiona todas las operaciones criptográficas internamente:

using IronPdf;
using IronPdf.Signing;

// Load the PDF document that needs to be signed
PdfDocument pdf = PdfDocument.FromFile("contract.pdf");

// Create a signature object using the certificate file path and password
var signature = new PdfSignature("certificate.pfx", "password");

// Apply the cryptographic signature to the document
// This embeds an invisible digital signature in the PDF structure
pdf.Sign(signature);

// Save the signed document to a new file
pdf.SaveAs("contract-signed.pdf");

Entrada

contrato.pdf - Documento antes de firmar

contrato.pdf - Documento antes de firmar

Salida

El resultado es un PDF con firma digital invisible embebida. Cuando se abre en Adobe Acrobat, AutoFirma, FNMT-Ceres o cualquier otro visor PDF compatible con firma, el documento muestra el panel de validación de firma con la información del firmante (extraída del campo Subject del certificado), la fecha y hora de firma, y si el documento ha sido modificado desde la firma.

Para procesamiento por lotes — habitual cuando un ERP genera y firma cientos de facturas al cierre mensual — IronPDF ofrece un patrón one-liner:

using IronPdf;
using IronPdf.Signing;

// One-line approach for signing PDFs
// Useful for batch processing where you don't need to manipulate the document
var signature = new PdfSignature("certificate.pfx", "password");
PdfDocument.FromFile("document.pdf").Sign(signature).SaveAs("document-signed.pdf");

Metadatos de firma y razón de firma

Las firmas digitales admiten metadatos que dan contexto al evento de firma. Esta información se muestra en el panel de firma de los visores PDF y se incorpora al rastro de auditoría del documento. Los campos relevantes en flujos ibéricos:

using IronPdf;
using IronPdf.Signing;
using System;

// Load the document to be signed
PdfDocument pdf = PdfDocument.FromFile("invoice.pdf");

// Create a signature with the company certificate
var signature = new PdfSignature("certificate.pfx", "password")
{
    // Add metadata to create an audit trail
    // This information appears in the signature panel of PDF readers
    SigningReason = "Invoice Approval",
    SigningLocation = "New York Office",
    SigningContact = "accounts@company.com",
    SignatureDate = DateTime.UtcNow
};

// Apply the signature with all metadata included
pdf.Sign(signature);
pdf.SaveAs("invoice-approved.pdf");
Campo de metadatosPropósitoValor de ejemplo (contexto ibérico)
SigningReasonRazón de la firma"Aprobación de factura conforme con VeriFactu", "Conformidad expediente administrativo"
SigningLocationLugar de la firma"Madrid, Oficina Central", "Bilbao, Sucursal Bizkaia"
SigningContactContacto del firmante para consultas"contabilidad@empresa.es", "+34 91 555 0123"
SignatureDateMarca temporal del evento de firmaDateTime.UtcNow

En sistemas ibéricos, estos campos se conectan habitualmente con la información operativa: el sistema de aprobación de facturas establece SigningReason al número del registro VeriFactu correspondiente, la plataforma de gestión documental establece la ubicación al código del puesto de trabajo del empleado público, y el campo de contacto se rellena con el correo electrónico del departamento responsable.


Sello de tiempo cualificado con TSA-FNMT

Las firmas digitales incluyen una marca temporal del momento de la firma, pero esa marca proviene del reloj del servidor donde se firmó. Para firmas que requieran verificación años después, o cuando la fecha exacta de firma tenga relevancia jurídica, un sello de tiempo cualificado emitido por una Time Stamping Authority (TSA) cualificada proporciona evidencia legal independiente.

RFC 3161 y TSAs españolas cualificadas

El protocolo de sello de tiempo es RFC 3161 (Time-Stamp Protocol, TSP). IronPDF soporta cualquier TSA conforme RFC 3161 — incluyendo las TSAs cualificadas españolas y europeas:

using IronPdf;
using IronPdf.Signing;
using System;

// Load the document to sign
PdfDocument pdf = PdfDocument.FromFile("agreement.pdf");
var signature = new PdfSignature("certificate.pfx", "password")
{
    SigningReason = "Agreement Execution",
    // Configure a trusted timestamp server (RFC 3161 compliant)
    // This provides cryptographic proof of when the document was signed
    TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256,
    TimeStampUrl = "http://timestamp.digicert.com"
};

// Apply the signature with the trusted timestamp
pdf.Sign(signature);
pdf.SaveAs("agreement-timestamped.pdf");

TSAs cualificadas habitualmente usadas en el ecosistema ibérico:

  • TSA-FNMT (tsa.fnmt.es) — TSA cualificada de la FNMT-RCM. La más extendida en sector público y en empresas con certificados FNMT.
  • AC Camerfirma TSA — TSA disponible para clientes con certificados Camerfirma; muy usada en ámbito notarial y empresarial mediano.
  • IZENPE TSA — TSA del País Vasco, usada junto con TicketBAI y certificados IZENPE.
  • TSAs europeas reconocidas eIDAS — DigiCert TSA, GlobalSign TSA y otras admisibles bajo reconocimiento mutuo si están cualificadas en algún Estado miembro de la UE.

La elección del algoritmo de hash importa para la validez extendida. SHA-256 es el estándar actual; IronPDF también soporta SHA-512 para requisitos de seguridad más estrictos. Los algoritmos antiguos como SHA-1 deben evitarse — están obsoletos criptográficamente y no son admisibles para firma cualificada.

Niveles PAdES-B, PAdES-T, PAdES-LT, PAdES-LTV

PAdES (ETSI EN 319 142) define cuatro niveles de conformidad de complejidad creciente:

  • PAdES-B (basic) — firma electrónica con certificado X.509. Aporta autenticidad e integridad. Es el nivel mínimo de eIDAS AES cuando el certificado es cualificado.
  • PAdES-T (timestamp) — PAdES-B más sello de tiempo cualificado al momento de la firma. Demuestra cuándo se firmó.
  • PAdES-LT (long-term) — PAdES-T más información de revocación (OCSP, CRLs) embebida en un Document Security Store. Permite validar la firma sin acceso a las fuentes originales de OCSP/CRL.
  • PAdES-LTV (long-term validation) — PAdES-LT más sello de tiempo de archivado renovable. Permite re-sellado periódico para extender indefinidamente la cadena de confianza, incluso después de que el algoritmo de hash de la firma original quede obsoleto.

Para flujos del sector público español bajo ENI con plazos de conservación extendidos, PAdES-LTV es la elección operativa. Para flujos B2B Crea y Crece donde la factura debe sobrevivir al periodo de prescripción tributaria (4-10 años bajo LGT), PAdES-LT con re-sellado opcional suele ser suficiente. Para flujos de contrato comercial estándar PAdES-T basta.


Mi biblioteca favorita de este tipo es IronPDF. Permite una manipulación rápida y eficiente de archivos PDF. También tiene muchas funciones valiosas, como exportar al formato PDF/A y firmar documentos PDF digitalmente.

Milan Jovanovic

Microsoft MVP

Ver estudio de caso

IronOCR significa que podemos ahorrar $40,000 anualmente en el procesamiento manual, mientras mejoramos la productividad y liberamos recursos para tareas de alto impacto. Lo recomendaría encarecidamente.

Brent Matzelle

Director de Tecnología, OPYN

Ver estudio de caso

El Iron Suite juega un papel crucial en nuestras operaciones. Estas son herramientas que aumentan la eficiencia en toda la empresa, incluyendo la creación de planos y la mejora en la gestión de inventario.

David Jones

Ingeniero de Software Principal, Agorus Build

Ver estudio de caso

HSM y QSCD para certificados cualificados

La firma electrónica cualificada eIDAS requiere un dispositivo cualificado de creación de firma (QSCD) — habitualmente un HSM (Hardware Security Module) certificado Common Criteria EAL4+ o una tarjeta criptográfica cualificada. La clave privada del certificado vive dentro del dispositivo y nunca sale en claro; el HSM expone una interfaz Sign(hash) que genera la firma sin revelar la clave.

Integración PKCS#11 con HSM corporativo

PKCS#11 (Cryptographic Token Interface Standard, también conocido como Cryptoki) es el estándar industrial para acceder a HSMs desde aplicaciones. IronPDF soporta integración PKCS#11 a través de su funcionalidad HsmSigner, permitiendo firmar PDFs con claves protegidas en HSM corporativo sin que la clave privada toque la memoria del proceso .NET.

HSMs cualificados habituales en el mercado español:

  • HSMs en nube cualificados eIDAS — AWS CloudHSM, Azure Dedicated HSM, Google Cloud HSM con configuración FIPS 140-2 Level 3. Requieren validación adicional para uso como QSCD.
  • HSMs on-premise — Thales Luna, Entrust nShield, Utimaco SecurityServer — ampliamente desplegados en banca, seguros, sector público y en proveedores cualificados.
  • HSMs en nube de prestador cualificado — FNMT-RCM ofrece servicio de firma centralizada para entidades públicas y privadas usando HSM cualificado gestionado por el propio prestador.

El patrón habitual de integración: la aplicación .NET con IronPDF carga el certificado público desde el HSM (sólo metadatos, no clave privada), construye el hash del PDF a firmar localmente, envía el hash al HSM vía PKCS#11, y recibe el bloque de firma criptográfica que IronPDF embebe en el PDF de salida con el formato PAdES apropiado.

Tarjetas criptográficas y Cl@ve PIN

Para flujos donde el firmante es persona física actuando desde un puesto de trabajo (no en backend automatizado), la firma cualificada habitualmente se realiza con tarjeta criptográfica — DNIe (Documento Nacional de Identidad electrónico) o tarjeta corporativa cualificada. El usuario inserta la tarjeta en el lector, introduce el PIN, y la operación de firma se realiza dentro del chip de la tarjeta.

Para este caso, IronPDF puede invocarse desde una aplicación cliente que accede al certificado almacenado en la tarjeta a través del almacén de Windows (CryptoAPI / CNG) o de PKCS#11 directo. AutoFirma cubre el patrón de aplicación cliente; un sistema custom puede integrar IronPDF con la misma infraestructura subyacente.

Cl@ve PIN y Cl@ve Permanente son los sistemas de autenticación del ciudadano de la Administración General del Estado, con soporte para firma cualificada en flujos guiados desde sede electrónica. Para integración programática backend Cl@ve no aplica — es un sistema de orquestación del usuario humano.


Flujos españoles: FACe, Crea y Crece, TicketBAI

Tres flujos concentran la mayor parte del trabajo real de firma cualificada en el ecosistema ibérico.

Firma PAdES en envíos B2G a FACe

FACe (face.gob.es) — el Punto General de Entrada de Facturas Electrónicas de la Administración General del Estado — recibe facturas en formato Facturae XML firmadas con XAdES. Sin embargo, el PDF visualizable que se entrega al receptor habitualmente se firma también con PAdES como capa adicional de no repudio.

El patrón típico para un proveedor que factura a un organismo público:

  1. El ERP del proveedor genera el XML Facturae 3.2.2.
  2. El sistema firma el XML con XAdES usando el certificado cualificado del representante de la entidad emisora (FNMT-RCM de representante legal, típicamente).
  3. IronPDF renderiza el PDF visualizable de la factura desde la plantilla HTML correspondiente.
  4. IronPDF firma el PDF visualizable con PAdES usando el mismo certificado cualificado.
  5. El conjunto — PDF/A-3 con Facturae XML embebido y firmado, sobre el cual además vive una firma PAdES — se sube a FACe vía interfaz web o API SOAP/REST.

El esfuerzo de firma se duplica (XAdES sobre XML + PAdES sobre PDF), pero la finalidad jurídica también: el XML es la fuente estructurada que el ERP del receptor procesa automáticamente; el PDF es la copia visualizable que circula por correo electrónico, archivado, o reproducción impresa. Ambas firmas pueden compartir el mismo certificado cualificado del emisor.

Crea y Crece B2B: PAdES + Facturae XAdES

Bajo el mandato Crea y Crece (2027 para empresas > 8 M €, 2028 para el resto), el flujo es estructuralmente idéntico al de FACe — emisión de Facturae XML firmado con XAdES, PDF visualizable firmado con PAdES, intercambio vía plataforma autorizada (EDICOM, Sovos, Seres, Voxel) o canal directo. La diferencia es el destinatario: FACe es la pasarela B2G del sector público, Crea y Crece es el régimen B2B privado entre empresas.

Para el flujo B2B Crea y Crece, el patrón híbrido PDF/A-3 con Facturae XML embebido como anexo (cubierto en detalle en el tutorial de archivado PDF/A) simplifica la lógica: un único archivo lleva el documento visualizable, el XML estructurado, ambas firmas y los metadatos XMP. IronPDF genera el PDF/A-3 desde HTML, embebe el XML Facturae como anexo, y aplica la firma PAdES sobre el contenedor.

TicketBAI y la cadena XAdES foral

TicketBAI — vigente en Bizkaia, Gipuzkoa y Araba — opera sobre una cadena de tickets XML firmados con XAdES y encadenados por hash al ticket anterior. La firma XAdES sobre el XML TicketBAI propiamente dicha queda fuera del alcance directo de IronPDF: IronPDF firma PDFs (PAdES), no XML (XAdES).

Sin embargo, el flujo TicketBAI completo incluye un PDF visualizable del ticket — la boleta que recibe el cliente final, equivalente al ticket de caja del régimen tradicional pero ahora generada electrónicamente. Ese PDF visualizable entra dentro del alcance de IronPDF: se renderiza desde HTML, opcionalmente se firma con PAdES como capa adicional de no repudio, e incluye el QR TicketBAI obligatorio que enlaza al verificador de la Diputación Foral correspondiente.

El certificado de firma habitual en flujos TicketBAI es FNMT-RCM o IZENPE — la elección depende de si el sujeto pasivo opera mayoritariamente fuera del territorio foral vasco (FNMT-RCM) o dentro de él (IZENPE).


Firma visual y flujos multi-firma

Muchos procesos de negocio español tienen costumbre de bloques de firma visibles, y los receptores esperan ver dónde y cuándo se firmó un documento. IronPDF permite aplicar la firma PAdES criptográfica junto con la representación visual sobre la página, obteniendo lo mejor de ambos mundos.

Representación visual sobre PAdES

Una firma visual es típicamente una imagen — firma manuscrita escaneada, sello corporativo, o bloque de texto estilizado — colocada en una posición específica de la página PDF. IronPDF gestiona el posicionamiento y renderizado con el método LoadSignatureImageFromFile:

using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;

// Load the document to sign
PdfDocument pdf = PdfDocument.FromFile("contract.pdf");
var signature = new PdfSignature("certificate.pfx", "password")
{
    SigningReason = "Contract Approval",
    SigningLocation = "Head Office"
};

// Define the position and size for the visible signature image
// Rectangle parameters: x position, y position, width, height (in points)
// Points are measured from the bottom-left corner of the page
var signatureArea = new Rectangle(150, 100, 200, 50);

// Load and attach the visual signature image
// The image will appear at the specified location on the document
signature.LoadSignatureImageFromFile(
    "signature-image.png",   // Path to the signature image file
    0,                       // Page index (0 = first page)
    signatureArea            // Position and dimensions
);

// Apply both the cryptographic signature and visual representation
pdf.Sign(signature);
pdf.SaveAs("contract-visually-signed.pdf");

El sistema de coordenadas usa puntos (1/72 de pulgada) medidos desde la esquina inferior izquierda de la página. Para una página A4 ibérica estándar (595 x 842 puntos), colocar una firma cerca de la esquina inferior derecha implica considerar tanto el tamaño de la firma como los márgenes apropiados.

Métodos alternativos para cargar imágenes de firma desde diferentes orígenes:

using IronPdf.Signing;
using IronSoftware.Drawing;
using System.IO;

// Create signature object
var signature = new PdfSignature("certificate.pfx", "password");
var signatureArea = new Rectangle(400, 50, 150, 75);

// Method 1: Load signature image directly from a file path
signature.LoadSignatureImageFromFile("signature.png", 0, signatureArea);

// Method 2: Load from a stream (useful for database-stored images)
using (FileStream imageStream = File.OpenRead("signature.png"))
{
    signature.LoadSignatureImageFromStream(imageStream, 0, signatureArea);
}

// Method 3: Load from AnyBitmap (IronSoftware's cross-platform image type)
AnyBitmap signatureBitmap = AnyBitmap.FromFile("signature.png");
using (var stream = signatureBitmap.ToStream())
{
    signature.LoadSignatureImageFromStream(stream, 0, signatureArea);
}

Formatos de imagen soportados: PNG, JPEG, GIF, BMP, TIFF y WebP. PNG con transparencia funciona especialmente bien para imágenes de firma — el fondo transparente permite que el contenido subyacente del documento se vea a través.

Firma secuencial y guardado incremental

Los procesos de negocio español complejos requieren a menudo varias firmas de personas diferentes, aplicadas en orden específico. Un expediente administrativo puede requerir aprobación del técnico instructor, después del jefe de servicio, después del órgano superior firmante. Una factura puede requerir la firma del responsable de compras y del director financiero. IronPDF soporta estos flujos mediante guardado incremental y permisos de firma.

Los documentos PDF pueden almacenar múltiples revisiones internamente, similar al control de versiones. Cada firma aplica al estado del documento en ese momento. Los firmantes posteriores añaden sus firmas a nuevas revisiones, creando una cadena de aprobaciones donde cada firma puede verificarse independientemente.

using IronPdf;
using IronPdf.Signing;

// Load the purchase order document
PdfDocument pdf = PdfDocument.FromFile("purchase-order.pdf");

// First signer: Department Manager approves the purchase order
var managerSignature = new PdfSignature("certificate.pfx", "password")
{
    SigningReason = "Manager Approval",
    SigningLocation = "Department A"
};

// Sign the document and save
// This preserves the original state while adding the signature
pdf.Sign(managerSignature);
pdf.SaveAs("po-manager-approved.pdf");

Cuando el documento pasa al siguiente firmante, éste lo carga y añade su propia firma:

using IronPdf;
using IronPdf.Signing;

// Load the document that already has the manager's signature
PdfDocument pdf = PdfDocument.FromFile("po-manager-approved.pdf");

// Second signer: Finance department verifies budget availability
var financeSignature = new PdfSignature("certificate.pfx", "password")
{
    SigningReason = "Finance Approval",
    SigningLocation = "Finance Department"
};

// Add the second signature
// Both signatures remain independently verifiable
pdf.Sign(financeSignature);
pdf.SaveAs("po-finance-approved.pdf");

Cada revisión mantiene su propia firma, y los visores PDF muestran el historial completo de quién firmó cuándo. En expedientes administrativos bajo ENI, este historial sirve como evidencia legal del orden de aprobación.


Verificación de firmas y detección de manipulación

Antes de añadir una nueva firma a un documento, el código debe verificar que las firmas existentes siguen siendo válidas. Un documento modificado fuera del flujo previsto puede tener firmas inválidas — síntoma de manipulación o de violación de proceso.

Validar firmas existentes antes de añadir nuevas

using IronPdf;
using System;

// Load a signed document
PdfDocument pdf = PdfDocument.FromFile("contract-signed.pdf");

// Verify all existing signatures in the document
// Returns true only if ALL signatures are valid and untampered
bool isValid = pdf.VerifyPdfSignatures();

Console.WriteLine($"Signatures Valid: {isValid}");

// Get signature details
var signatures = pdf.GetVerifiedSignatures();
Console.WriteLine($"Number of Signatures: {signatures.Count}");

Para inspección detallada, se puede recuperar información de cada firma verificada:

using IronPdf;
using System;

// Load a document with multiple signatures
PdfDocument pdf = PdfDocument.FromFile("multi-signed-document.pdf");

// Retrieve detailed information about each verified signature
var verifiedSignatures = pdf.GetVerifiedSignatures();

// Iterate through all signatures to build an audit trail
foreach (var sig in verifiedSignatures)
{
    Console.WriteLine($"Signer: {sig.SignerName}");
    Console.WriteLine($"Reason: {sig.SigningReason}");
    Console.WriteLine($"Location: {sig.SigningLocation}");
    Console.WriteLine($"Date: {sig.SigningDate}");
    Console.WriteLine($"Contact: {sig.SigningContact}");
    Console.WriteLine("---");
}

Esta información permite construir rastros de auditoría, verificar cadenas de aprobación, y asegurar que los documentos tienen todas las firmas requeridas antes de pasar a la siguiente fase del flujo. En el contexto del sector público español bajo ENI, esta verificación es habitualmente obligatoria antes de archivar el documento firmado.

Detección de documentos manipulados

El método VerifyPdfSignatures() devuelve false si cualquier firma del documento es inválida. Las causas habituales: contenido modificado tras la firma, datos de firma corruptos, certificado revocado, o certificado no válido en el momento de uso.

using IronPdf;
using System;

// Load a signed document and verify
PdfDocument pdf = PdfDocument.FromFile("contract-signed.pdf");

// Check if all signatures are still valid
bool isValid = pdf.VerifyPdfSignatures();

if (isValid)
{
    Console.WriteLine("Document has not been tampered with");
    Console.WriteLine("All signatures are valid");
}
else
{
    Console.WriteLine("WARNING: Document may have been tampered with!");
    Console.WriteLine("One or more signatures are invalid");
}

En flujos de recepción Crea y Crece, esta verificación se realiza al recibir cada factura entrante: si la firma del emisor sobre el Facturae XML (o sobre el PDF visualizable) es inválida, la factura se rechaza automáticamente y se eleva al departamento de cuentas a pagar para conciliación manual con el proveedor.

Para aplicaciones que requieran eliminación de firmas (por ejemplo, para crear una copia sin firmar para redistribución), IronPDF expone el método RemoveSignatures():

using IronPdf;

// Load a signed document
PdfDocument pdf = PdfDocument.FromFile("signed-template.pdf");

// Remove all digital signatures from the document
// This strips signature data but does not restore previous document state
pdf.RemoveSignatures();

// Save as an unsigned version
pdf.SaveAs("unsigned-template.pdf");

Nota: la eliminación de firmas no recupera ningún estado previo del documento. El método simplemente elimina los datos de firma de la versión actual.


Próximos pasos

La firma electrónica en C# para el ecosistema documental español es la pieza donde el marco común europeo eIDAS se encuentra con las realidades concretas del mercado ibérico — el dominio de FNMT-RCM en el sector público, la presencia de Camerfirma en el ámbito notarial-empresarial, la singularidad de IZENPE en territorio foral vasco, los HSMs cualificados como QSCD para firma de entidad, las TSAs cualificadas para sello de tiempo, y los tres flujos B2G/B2B/foral (FACe, Crea y Crece, TicketBAI) que concentran la mayor parte del trabajo real. IronPDF cubre la capa PAdES sobre el PDF visualizable, la integración con HSM vía PKCS#11, y la verificación de firmas; las piezas complementarias de XAdES sobre XML, gestión avanzada del certificado en HSM, y orquestación del flujo de aprobación se delegan en componentes especializados que se integran sobre el documento que IronPDF produce.

Para profundizar en aspectos específicos del flujo: el tutorial Archivado electrónico de facturas y documentos en C# con PDF/A para España cubre PAdES-LTV en detalle como capa de archivado a largo plazo; el tutorial Generación de facturas en C# .NET para VeriFactu, TicketBAI y Facturae cubre el flujo de facturación donde la firma PAdES se aplica sobre el PDF visualizable. La guía how-to firma de PDF cubre opciones de firma básica; la guía how-to firma con HSM extiende los patrones a dispositivos PKCS#11 cualificados.

IronPDF es la base sobre la que se monta la firma electrónica PDF en el ecosistema ibérico: firma PAdES-B/T/LT/LTV con certificado X.509 cualificado (FNMT-RCM, AC Camerfirma, IZENPE), integración PKCS#11 con HSM corporativo o de prestador cualificado, sello de tiempo cualificado vía RFC 3161 contra TSA-FNMT u otra TSA reconocida eIDAS, firmas visuales sobre la firma criptográfica, verificación de firmas con detección de manipulación, y operación on-premise dentro del perímetro de la organización — alineada con la preferencia ibérica por arquitecturas que minimicen exposición LOPDGDD bajo el régimen sancionador AEPD.

¿Listo para empezar? Descargue IronPDF y pruébelo con una versión de prueba gratuita de 30 días. La biblioteca incluye una licencia de desarrollo gratuita que permite evaluar la firma PAdES con certificado cualificado FNMT-RCM, la integración con HSM de prueba vía PKCS#11, y la verificación contra la lista de QTSPs cualificados antes de comprometerse con una licencia de producción. Si tiene dudas sobre la integración con su HSM corporativo, sobre la elección de TSA cualificada para su flujo, o sobre el cumplimiento simultáneo de eIDAS QES y los marcos sectoriales españoles, contacte con nuestro equipo de soporte técnico.

Preguntas Frecuentes

¿Qué es una firma digital en el contexto de los PDFs?

Una firma digital es un mecanismo criptográfico utilizado para verificar la autenticidad e integridad de un documento PDF. Garantiza que el documento no ha sido alterado y confirma la identidad del firmante.

¿Cómo puedo implementar firmas digitales en C# utilizando IronPDF?

IronPDF proporciona una API sencilla para implementar firmas digitales en archivos PDF utilizando C#. Puede firmar documentos mediante programación utilizando la firma de certificados, añadiendo firmas visuales y gestionando flujos de trabajo multipartitos.

¿Qué tipos de firmas digitales admite IronPDF?

IronPDF admite varios tipos de firmas digitales, incluidas las firmas basadas en certificados, las firmas visuales y las que requieren servidores de marcas de tiempo para una verificación adicional.

¿Puedo verificar una firma digital en un PDF utilizando IronPDF?

Sí, IronPDF incluye funciones para verificar firmas digitales en documentos PDF, lo que garantiza que el documento es auténtico y no ha sido manipulado desde que se firmó.

¿Cuál es la función de un servidor de marcas de tiempo en las firmas digitales?

Un servidor de marcas de tiempo proporciona una fuente de tiempo fiable para confirmar cuándo se aplicó una firma digital a un documento. Esto añade una capa adicional de seguridad al verificar la hora exacta de la firma.

¿En qué se diferencian las firmas visuales de los certificados digitales?

Las firmas visuales muestran una representación gráfica de una firma en un documento, mientras que los certificados digitales proporcionan una prueba criptográfica de autenticidad e integridad sin mostrar necesariamente una marca visual.

¿Puede IronPDF gestionar flujos de trabajo de firma multiparte?

Sí, IronPDF es capaz de gestionar flujos de trabajo de firma multiparte, lo que permite que varias partes firmen un documento de forma coordinada y segura.

¿Cuáles son las ventajas de utilizar firmas digitales en los documentos PDF?

Las firmas digitales mejoran la seguridad al garantizar la integridad y autenticidad de los documentos. También agilizan los flujos de trabajo al permitir la firma electrónica, que es más rápida y eficiente que los métodos tradicionales.

¿Es posible firmar PDF mediante programación sin interacción del usuario?

Sí, con IronPDF puede firmar archivos PDF mediante programación en C# sin necesidad de interacción por parte del usuario, lo que resulta ideal para flujos de trabajo automatizados y procesamiento por lotes.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien estructurados y visualmente atractivos.

...
Leer más

¿Listo para empezar?

Nuget Downloads 20,667,543Versión:2026.7recién publicada

Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta
Biblioteca C# NuGet para PDF
Instalar con NuGet

Versión: 2026.7

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. En el Explorador de Soluciones, haga clic derecho en Referencias, Administrar Paquetes NuGet
  2. Seleccione Examinar y busque "IronPDF"
  3. Seleccione el paquete e instale
C# PDF DLL
Descargar DLL

Versión: 2026.7

Descargar ahora

o descargue el Instalador de Windows aquí.

  1. Descargue y descomprima IronPDF en una ubicación como ~/Libs dentro del directorio de su solución
  2. En el Explorador de Soluciones de Visual Studio, haga clic derecho en Referencias. Seleccione Examinar, "IronPDF.dll"

Licencias desde $999

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta