IRONSOFTWAREHOME

Cómo Leer el Certificado del Firmante a partir de Firmas PDF Verificadas en C# (X.509, eIDAS, Cadena)

Curtis Chau
Curtis Chau
Updated: 15 de mayo de 2026

Un contrato llega a tu canal de auditoría. Está firmado digitalmente, la firma es válida y tu equipo de cumplimiento necesita respuestas: quién lo firmó, si su certificado era válido esa mañana, y si la CA emisora coincide con tu lista de confianza. Podrías extraer los bytes de la firma en bruto, analizar el DER, y recorrer la cadena del certificado a mano. O podrías pedir al objeto VerifiedSignature su SignerCertificate y leer las respuestas como propiedades.

Para eso están diseñadas las propiedades SignerCertificate y CertificateChain en VerifiedSignature. Devueltas desde PdfDocument.GetVerifiedSignatures(), exponen la identidad completa X.509 del firmante, la CA emisora, las fechas de validez, la huella digital SHA-256, los bytes DER en bruto, y cada certificado intermedio hasta la raíz. Esa es la superficie de la API que necesitas para el cumplimiento eIDAS, fijación de certificados, registros de auditoría y verificación de la cadena de confianza.

Esta guía recorre tres familias de inspección de certificados:

  • Detalles estándar de X.509: propiedades de identidad, nombres distinguidos completos, ventanas de validez y bytes DER en bruto para la interoperabilidad de X509Certificate2.
  • Campos de eIDAS y de industrias reguladas: obtener la identificación nacional del firmante desde SubjectSerialNumber y leer OID numéricos como 2.5.4.97 para el identificador de organización eIDAS.
  • Validación de la cadena de confianza: fijación con huella digital SHA-256 y recorrido completo de la cadena desde el firmante hasta la CA raíz.

Comienza una prueba gratuita de 30 días para probar la inspección de certificados en tu canal de verificación.

NuGetInstall with 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.
Inicio rápido: Leer el Certificado del Firmante desde un PDF Firmado

Llama a GetVerifiedSignatures en un PDF cargado y lee las propiedades del certificado del firmante directamente del resultado.

  1. 1Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf

  2. 2Copy and run this code snippet.

    var sig = PdfDocument.FromFile("signed.pdf").GetVerifiedSignatures().First();
    var cert = sig.SignerCertificate;
    Console.WriteLine($"{cert?.CommonName} ({cert?.Organization}) valid until {cert?.NotAfter}");
    C#
  3. 3Deploy to test on your live environment

    Start using IronPDF in your project today with a free trial
    arrow pointer

¿Cómo Extraer la Identificación Nacional o Personal del Firmante?

La propiedad SubjectSerialNumber devuelve el valor del OID SERIALNUMBER del DN del Subject del certificado. En industrias reguladas (certificados calificados eIDAS, banca, ID digitales emitidos por el gobierno), este campo contiene la identificación nacional del firmante, ID tributario o número de identificación personal. No es el número de serie propio del certificado; eso es CertificateSerialNumber.

using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("eidas-signed-invoice.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // Subject DN SERIALNUMBER OID (national ID, tax ID, etc.)
    Console.WriteLine($"Signer Identity (SERIALNUMBER): {cert.SubjectSerialNumber ?? "not present"}");

    // Certificate's own serial from the issuing CA
    Console.WriteLine($"Certificate Serial (CA-issued):  {cert.CertificateSerialNumber}");
}
Tips: Recordatorio rápido sobre la diferencia entre estos dos: SubjectSerialNumber te dice quién firmó el documento (una persona u organización ID, como un ID nacional o número tributario incrustado en el DN del Subject). CertificateSerialNumber te dice qué certificado fue usado; es el número de serie único que la Autoridad de Certificación emisora asigna para listas de revocación y registros de auditoría.

¿Cómo Acceder a Propiedades de Identidad Convenientes?

SignerCertificateInfo expone los campos del DN del Subject más comúnmente necesarios como propiedades directas, por lo que no necesitas analizar la cadena DN completa por ti mismo.

Leyendo el Nombre y Afiliación del Firmante

Las propiedades CommonName, Organization, Country y Email cubren lo que muchos flujos de trabajo de identidad buscan primero.

using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("signed-agreement.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // Common Subject DN fields exposed directly as properties
    Console.WriteLine($"CommonName (CN):  {cert.CommonName}");
    Console.WriteLine($"Organization (O): {cert.Organization}");
    Console.WriteLine($"Country (C):      {cert.Country}");
    Console.WriteLine($"Email:            {cert.Email}");
}

La propiedad Email primero verifica el DN del Subject por el OID emailAddress. Si no está presente, recurre a la extensión SAN (Nombre Alternativo del sujeto) rfc822Name. La propiedad Country devuelve el código de dos letras ISO 3166-1 alfa-2 (por ejemplo, "DE", "US", "FR"). Todas las propiedades convenientes devuelven null si el campo correspondiente no está presente en el certificado.

Leyendo el DN Completo Cuando Necesitas Todo

Para registros de auditoría, análisis posteriores o informes de cumplimiento, SubjectDN y IssuerDN devuelven las cadenas de nombre distinguido completas.

using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("signed-agreement.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // Full DN strings for audit logging or downstream parsing
    Console.WriteLine($"Full Subject DN: {cert.SubjectDN}");
    Console.WriteLine($"Full Issuer DN:  {cert.IssuerDN}");
}

¿Cómo Extraer Campos Arbitrarios del Subject e Issuer?

Los métodos GetSubjectField(string) y GetIssuerField(string) aceptan nombres cortos u OIDs numéricos. No distinguen entre mayúsculas y minúsculas y devuelven null si el campo no está presente.

Nombres cortos soportados: CN, O, OU, C, L, ST, E, SERIALNUMBER, SURNAME, T, GIVENNAME, UID, ORGANIZATIONIDENTIFIER.

Leyendo Cualquier Campo del Subject (Incluyendo OIDs de eIDAS)

Pasa un nombre corto como "OU" o un OID numérico como "2.5.4.97" (el identificador de organización de eIDAS) para extraer cualquier campo del DN del Subject.

using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("eidas-contract.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // Short-name lookups (case-insensitive)
    string? orgUnit = cert.GetSubjectField("OU");
    string? surname = cert.GetSubjectField("SURNAME");
    string? givenName = cert.GetSubjectField("GIVENNAME");
    string? title = cert.GetSubjectField("T");

    // Numeric OID lookup (eIDAS organizationIdentifier)
    string? orgId = cert.GetSubjectField("2.5.4.97");

    Console.WriteLine($"Name: {givenName} {surname} ({title}), OU: {orgUnit}");
    Console.WriteLine($"eIDAS Org ID (2.5.4.97): {orgId ?? "not present"}");
}

La búsqueda de OID numérico es esencial para los certificados de industria regulada y eIDAS que incrustan identificadores de organización, calificaciones profesionales, o campos específicos de jurisdicción no cubiertos por nombres cortos estándar.

Leyendo los Campos del Issuer

GetIssuerField funciona de la misma manera contra el nombre distinguido de la CA emisora. Esto es útil para la validación de confianza, informes de CA, y para agrupar firmas por su autoridad emisora.

using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("eidas-contract.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // GetIssuerField works the same way as GetSubjectField
    string? issuerCN = cert.GetIssuerField("CN");
    string? issuerO = cert.GetIssuerField("O");
    string? issuerCountry = cert.GetIssuerField("C");

    Console.WriteLine($"Issued by: {issuerCN} ({issuerO}, {issuerCountry})");
}

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

¿Cómo Comprobar la Validez del Certificado?

SignerCertificateInfo proporciona dos asistentes de validez:

  • IsExpired devuelve true si DateTime.UtcNow > NotAfter.
  • IsValidAt(DateTime) devuelve true si la fecha dada cae dentro de la ventana NotAfter. El uso típico es confirmar que el certificado era válido en el momento de la firma.
using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("archived-contract.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    Console.WriteLine($"Valid from:  {cert.NotBefore}");
    Console.WriteLine($"Valid until: {cert.NotAfter}");
    Console.WriteLine($"Expired now: {cert.IsExpired}");

    // Confirm certificate was valid when the document was signed
    bool validAtSigning = cert.IsValidAt(sig.SigningDate);
    Console.WriteLine($"Valid at signing time ({sig.SigningDate}): {validAtSigning}");
}
Tips: IsExpired devuelve false (no true) cuando no se pueden extraer fechas de validez del certificado. El asistente es intencionalmente conservador; no asume expiración solo porque falta metadata. Para flujos de trabajo de confianza cero, trata las fechas de validez faltantes como un caso de fallo explícitamente.

Para registros de auditoría, registra tanto la verificación IsExpired (validez actual) como la verificación IsValidAt(signingDate) (validez en el momento de la firma). Un certificado que ha expirado puede haber sido todavía válido cuando el documento fue firmado; ambos puntos de datos son importantes para el cumplimiento.

¿Cómo Usar la Huella Digital SHA-256 para la Fijación de Certificados?

La propiedad Sha256Thumbprint devuelve una cadena hexagonal de 64 caracteres en mayúscula, el hash SHA-256 del certificado codificado en DER. Este es el valor que emparejas contra una lista conocida de certificados de firmante aceptados.

using IronPdf;
using IronPdf.Signing.Inspection;
using System.Collections.Generic;

// Known-good signer thumbprints from a compliance database
var pinnedThumbprints = new HashSet<string>
{
    "A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2",
    "F6E5D4C3B2A1F6E5D4C3B2A1F6E5D4C3B2A1F6E5D4C3B2A1F6E5D4C3B2A1F6E5"
};

var pdf = PdfDocument.FromFile("submitted-form.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // Pin against trusted thumbprint list
    bool trusted = pinnedThumbprints.Contains(cert.Sha256Thumbprint);
    Console.WriteLine($"Signer: {cert.CommonName}, Thumbprint: {cert.Sha256Thumbprint}");
    Console.WriteLine($"Pinned: {trusted}");
}

¿Cómo Construir un X509Certificate2 a partir de Datos de Certificado en Bruto?

La propiedad RawData devuelve el certificado codificado en DER como un byte[]. Cada llamada devuelve una copia defensiva, por lo que los datos internos nunca se exponen por referencia. Puedes utilizar esto para construir un System.Security.Cryptography.X509Certificates.X509Certificate2 para la interoperabilidad con las APIs criptográficas nativas de .NET (construcción de cadenas, validación de políticas, verificación de CRL).

using IronPdf;
using IronPdf.Signing.Inspection;
using System.Security.Cryptography.X509Certificates;

var pdf = PdfDocument.FromFile("signed-report.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // Construct X509Certificate2 from defensive DER copy
    byte[] derBytes = cert.RawData;
    var x509 = new X509Certificate2(derBytes);

    Console.WriteLine($"X509 Subject:    {x509.Subject}");
    Console.WriteLine($"X509 Issuer:     {x509.Issuer}");
    Console.WriteLine($"X509 Serial:     {x509.SerialNumber}");
    Console.WriteLine($"X509 Algorithm:  {x509.SignatureAlgorithm.FriendlyName}");
    Console.WriteLine($"X509 Key Size:   {x509.PublicKey.Key.KeySize} bits");
}
Please note: Cada acceso a RawData devuelve una nueva copia defensiva. El arreglo de bytes interno nunca se expone por referencia, por lo que mutar los bytes devueltos no afectará a llamadas posteriores.

Esta ruta de interoperabilidad te permite conectar la verificación de firmas de IronPDF en las canalizaciones de validación de certificados de .NET que ya tienes, como X509Chain.Build(), comprobación de revocación via CRL/OCSP, o implementaciones personalizadas de X509CertificateValidator.

¿Cómo Recorrer la Cadena del Certificado?

La propiedad CertificateChain en VerifiedSignature devuelve un IReadOnlyList<SignerCertificateInfo> ordenado de firmante → CA(s) intermedia(s) → CA raíz. El índice 0 siempre es el certificado del firmante (el mismo objeto que SignerCertificate). La lista nunca es nula; si no se puede extraer la cadena, solo contiene el certificado del firmante.

using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("enterprise-signed.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    Console.WriteLine($"--- Signature: {sig.SignatureName} ---");
    Console.WriteLine($"Chain length: {sig.CertificateChain.Count}");

    // Walk from signer (index 0) through intermediates to root CA
    for (int i = 0; i < sig.CertificateChain.Count; i++)
    {
        var cert = sig.CertificateChain[i];
        string role = i == 0 ? "Signer"
                    : i == sig.CertificateChain.Count - 1 ? "Root CA"
                    : $"Intermediate CA ({i})";

        Console.WriteLine($"  [{role}]");
        Console.WriteLine($"    Subject:     {cert.SubjectDN}");
        Console.WriteLine($"    Issuer:      {cert.IssuerDN}");
        Console.WriteLine($"    Serial:      {cert.CertificateSerialNumber}");
        Console.WriteLine($"    Valid:       {cert.NotBefore} to {cert.NotAfter}");
        Console.WriteLine($"    Expired:     {cert.IsExpired}");
        Console.WriteLine($"    Thumbprint:  {cert.Sha256Thumbprint}");
    }
}
Please note: Cada SignerCertificateInfo en la cadena expone las mismas propiedades que SignerCertificate: campos de identidad, validez, huella digital, RawData, GetSubjectField(), y GetIssuerField(). Puedes validar la expiración de cada CA intermedia, comprobar la huella digital de la raíz contra tu almacén de raíces de confianza, y registrar la cadena completa para auditorías de cumplimiento.

Próximos pasos

SignerCertificate y CertificateChain te dan la inspección completa de X.509 sin salir de la superficie de la API de IronPDF. Desde aquí, los siguientes pasos naturales son más profundos hacia las partes de IronPDF en las que estas propiedades se conectan.

Para el lado de la firma del flujo de trabajo, la guía de cómo hacer firmas digitales cubre la creación de certificados, metadata y firma incremental. Para firmas basadas en HSM en entornos de alta seguridad, la guía de firma HSM cubre la integración con PKCS#11. ¿Necesitas fragmentos listos para ejecutar? El ejemplo de código de firmas digitales los proporciona.

¿Listo para intentarlo en tus propios PDFs firmados? Comienza tu prueba gratuita de 30 días o consulta las opciones de licencia.

Frequently Asked Questions

¿Cuál es el propósito de leer los detalles del certificado X.509 de las firmas PDF?

Leer detalles del certificado X.509 de las firmas PDF te permite verificar la identidad del firmante, comprobar la validez del certificado, y asegurar el cumplimiento de estándares como eIDAS. Este proceso es esencial para mantener la autenticidad e integridad del documento.

¿Cómo ayuda IronPDF a extraer la identidad del firmante de las firmas PDF?

IronPDF proporciona herramientas para extraer la identidad del firmante de las firmas PDF accediendo a los detalles del certificado X.509, facilitando la autenticación de la fuente del documento y la verificación de las credenciales del firmante.

¿Puede IronPDF extraer campos eIDAS de las firmas PDF?

Sí, IronPDF puede extraer campos eIDAS de las firmas PDF, permitiendo a los desarrolladores asegurarse de que los documentos cumplan con las regulaciones de la Unión Europea sobre firmas electrónicas.

¿Qué información se puede recuperar de una firma PDF usando IronPDF?

Usando IronPDF, puedes recuperar información como la identidad del firmante, validez del certificado, huella digital, y la cadena de certificados de una firma PDF, proporcionando una visión integral de la autenticidad de la firma.

¿Es posible verificar la validez de una firma PDF usando IronPDF?

Sí, IronPDF te permite verificar la validez de una firma PDF inspeccionando los detalles del certificado X.509, lo que puede incluir la comprobación de las fechas de caducidad y la integridad del certificado de firma.

¿Cuáles son los beneficios de usar IronPDF para la verificación de firmas PDF?

Usar IronPDF para la verificación de firmas PDF ofrece beneficios como la extracción automatizada de información detallada del certificado, compatibilidad con aplicaciones C#, y adherencia a estándares internacionales como eIDAS.

¿Cómo maneja IronPDF la extracción de huellas de firmas PDF?

IronPDF maneja la extracción de huellas accediendo a los detalles del certificado X.509 dentro de una firma PDF, permitiéndote verificar la autenticidad e integridad del certificado a través de su huella única.

¿Puede IronPDF proporcionar una cadena de certificados a partir de una firma PDF?

IronPDF puede proporcionar la cadena de certificados a partir de una firma PDF, ayudándote a rastrear el camino de confianza desde el certificado del firmante hasta un certificado raíz de confianza, asegurando la validez de la firma.

¿Qué lenguaje de programación es compatible con IronPDF para leer firmas PDF?

IronPDF es compatible con C# para leer y verificar firmas PDF, lo que lo convierte en una solución ideal para desarrolladores que trabajan dentro del ecosistema .NET.

¿Cumple IronPDF con los estándares internacionales para firmas electrónicas?

Sí, IronPDF cumple con estándares internacionales como eIDAS, asegurando que tus procesos de verificación de firmas PDF cumplan con los requisitos regulatorios para firmas electrónicas.

Curtis Chau
Technical Writer

Curtis Chau holds a Bachelor’s degree in Computer Science (Carleton University) and specializes in front-end development with expertise in Node.js, TypeScript, JavaScript, and React. Passionate about crafting intuitive and aesthetically pleasing user interfaces, Curtis enjoys working with modern frameworks and creating well-structured, visually appealing manuals.

...
Read More

¿Listo para empezar?

Nuget Downloads 20,389,208Versió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

Pruebe IronPDF gratis

Configúrese en 5 minutos

C# PDF DLL

Descargar DLL

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"
Biblioteca C# NuGet para PDF

Instalar con NuGet

                  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
Key in blue circle

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

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuenta
  • 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 related to IronPDF Product Demo

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