C#'da Doğrulanmış PDF İmzalarından İmzalayanın Sertifikasını Okuma (X.509, eIDAS, Zincir)

This article was translated from English: Does it need improvement?
Translated
View the article in English

Denetim boru hattınıza bir sözleşme gelir. Sözleşme dijital olarak imzalanmıştır, imza geçerlidir ve uyum ekibinizin bazı sorularına yanıt bulması gerekir: Sözleşmeyi kim imzalamıştır, o sabah sertifikası geçerli miydi ve sertifikayı veren CA, güvenilir listesiyle eşleşiyor mu? Ham imza baytlarını çekebilir, DER'yi ayrıştırabilir ve sertifika zincirini elle inceleyebilirsiniz. Veya cevapları özellikler olarak okuyarak VerifiedSignature nesnesine SignerCertificate sormayı deneyebilirsiniz.

Bu, VerifiedSignature üzerindeki SignerCertificate ve CertificateChain özelliklerinin neden inşa edildiğidir. PdfDocument.GetVerifiedSignatures()'den döndürülen, imzalayanın X.509 kimliği, veren CA, geçerlilik tarihleri, SHA-256 parmak izi, ham DER baytları ve köke kadar her ara sertifikayı gösterir. Bu, eIDAS uyumluluğu, sertifika sabitleme, denetim izleri ve güven zinciri doğrulaması için ihtiyacınız olan API yüzeyidir.

Bu kılavuz, üç sertifika denetim grubunu ele almaktadır:

  • Standart X.509 detayları: kimlik özellikleri, tam Ayırt Edilmiş İsimler, geçerlilik pencereleri ve X509Certificate2 iletişimi için ham DER baytları.
  • eIDAS ve düzenlenmiş endüstri alanları: SubjectSerialNumber üzerinden imzalayanın ulusal kimlik numarasını çekme ve eIDAS organizationIdentifier için 2.5.4.97 gibi sayısal OID'leri okuma.
  • Güven zinciri doğrulama: SHA-256 parmak izi sabitleme ve imzalayan kişiden kök CA'ya kadar tüm zinciri izleme.

Doğrulama sürecinizde sertifika denetimini test etmek için 30 günlük ücretsiz deneme sürümünü başlatın.

NuGet NuGet ile yükleyin

PM >  Install-Package IronPdf

NuGet'te hızlı kurulum için https://www.nuget.org/packages/IronPdf'i kontrol edin. 10 milyonun üzerinde indirme ile, C# ile PDF geliştirmeyi dönüştürüyor. DLL veya Windows yükleyici'yi de indirebilirsiniz.

Hızlı Başlangıç: İmzalı bir PDF'den İmzalayanın Sertifikasını Okuma

Yüklü bir PDF üzerinde GetVerifiedSignatures çağırarak, imzalayanın sertifika özelliklerini doğrudan sonuçtan okuyabilirsiniz.

  1. IronPDF aşağıdaki NuGet Paket Yöneticisi ile yükleyin

    PM > Install-Package IronPdf
  2. Bu kod parçacığını kopyalayın ve çalıştırın.

    var sig = PdfDocument.FromFile("signed.pdf").GetVerifiedSignatures().First();
    var cert = sig.SignerCertificate;
    Console.WriteLine($"{cert?.CommonName} ({cert?.Organization}) valid until {cert?.NotAfter}");
  3. Canlı ortamınızda test için dağıtım yapın

    Ücretsiz deneme ile bugün projenizde IronPDF kullanmaya başlayın

    arrow pointer


İmzalayanın ulusal veya kişisel kimlik numarasını nasıl çıkarırsınız?

SubjectSerialNumber özelliği, sertifikanın Konu DN'sinden SERIALNUMBER OID değerini döndürür. Düzenlemelere tabi sektörlerde (eIDAS onaylı sertifikalar, bankacılık, devlet tarafından verilen dijital kimlikler), bu alan imzalayan kişinin ulusal kimlik numarasını, vergi kimlik numarasını veya kişisel kimlik numarasını içerir. Bu, sertifikanın kendi seri numarası değildir; bu CertificateSerialNumber.

:path=/static-assets/pdf/content-code-examples/how-to/verify-pdf-signatures-serial-number.cs
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}");
}
Imports IronPdf
Imports IronPdf.Signing.Inspection

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

For Each sig In pdf.GetVerifiedSignatures()
    Dim cert = sig.SignerCertificate
    If cert Is Nothing Then Continue For

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

    ' Certificate's own serial from the issuing CA
    Console.WriteLine($"Certificate Serial (CA-issued):  {cert.CertificateSerialNumber}")
Next
$vbLabelText   $csharpLabel

İpuçlarıBu ikisi arasındaki farkla ilgili kısa bir hatırlatma: SubjectSerialNumber dokümanı kim imzaladığını söyler (bir kişi veya organizasyon kimliği, Konu DN içine gömülmüş gibi bir ulusal kimlik veya vergi numarası). CertificateSerialNumber hangi sertifikanın kullanıldığını söyler; (Bu, sertifika veren Yetkili Kurumun iptal listeleri ve denetim günlükleri için atadığı benzersiz seridir.

Convenience Identity Özelliklerine Nasıl Erişebilirsiniz?

SignerCertificateInfo en yaygın ihtiyaç duyulan Konu DN alanlarını doğrudan özellikler olarak gösterir, bu yüzden tam DN dizisini kendiniz ayrıştırmanıza gerek yoktur.

İmzalayanın Adını ve Bağlı Olduğu Kurumu Okuma

CommonName, Organization, Country ve Email özellikleri, çoğu kimlik iş akışının öncelikle ulaştığı şeyleri kapsar.

:path=/static-assets/pdf/content-code-examples/how-to/verify-pdf-signatures-identity-common.cs
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}");
}
Imports IronPdf
Imports IronPdf.Signing.Inspection

Dim pdf = PdfDocument.FromFile("signed-agreement.pdf")

For Each sig In pdf.GetVerifiedSignatures()
    Dim cert = sig.SignerCertificate
    If cert Is Nothing Then Continue For

    ' 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}")
Next
$vbLabelText   $csharpLabel

Email özelliği önce emailAddress OID'sini Konu DN'sinde kontrol eder. Mevcut değilse, Konu Alternatif Adı (SAN) rfc822Name uzantısına geri döner. Country özelliği, iki harfli ISO 3166-1 alpha-2 kodunu döndürür (örneğin, "DE", "US", "FR"). Tüm kolaylık özellikleri, sertifikada karşılık gelen alan mevcut değilse null döndürür.

Her Şeye İhtiyacınız Olduğunda Tam DN'yi Okuma

Denetim günlüğü, veri analizi veya uyumluluk raporları için, SubjectDN ve IssuerDN tam Ayırt Edilmiş İsim dizelerini döndürür.

:path=/static-assets/pdf/content-code-examples/how-to/verify-pdf-signatures-identity-full-dn.cs
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}");
}
Imports IronPdf
Imports IronPdf.Signing.Inspection

Dim pdf = PdfDocument.FromFile("signed-agreement.pdf")

For Each sig In pdf.GetVerifiedSignatures()
    Dim cert = sig.SignerCertificate
    If cert Is Nothing Then Continue For

    ' Full DN strings for audit logging or downstream parsing
    Console.WriteLine($"Full Subject DN: {cert.SubjectDN}")
    Console.WriteLine($"Full Issuer DN:  {cert.IssuerDN}")
Next
$vbLabelText   $csharpLabel
Icon Quote related to Her Şeye İhtiyacınız Olduğunda Tam DN'yi Okuma

Bu türden favori kütüphanem IronPDF'dir. PDF dosyalarının hızlı ve verimli bir şekilde işlenmesine olanak tanır. Ayrıca, PDF/A formatına dışa aktarma ve dijital imzalama gibi birçok değerli özelliğe sahiptir.

Milan Jovanovic related to Her Şeye İhtiyacınız Olduğunda Tam DN'yi Okuma

Milan Jovanovic

Microsoft MVP

Vaka çalışmasını görüntüle
Icon Quote related to Her Şeye İhtiyacınız Olduğunda Tam DN'yi Okuma

IronOCR, manuel işleme maliyetinden yıllık 40.000 USD tasarruf etmemizi sağlıyor, üretkenliği artırıyor ve yüksek etkili görevler için kaynakları serbest bırakıyor. Kesinlikle tavsiye ederim.

Brent Matzelle related to Her Şeye İhtiyacınız Olduğunda Tam DN'yi Okuma

Brent Matzelle

Teknoloji Müdürü, OPYN

Vaka çalışmasını görüntüle
Icon Quote related to Her Şeye İhtiyacınız Olduğunda Tam DN'yi Okuma

IronSuite, operasyonlarımızda kritik bir rol oynar. Bunlar, iş süreçlerinde verimliliği artıran, kat planları oluşturmak ve envanter yönetimini geliştirmek gibi araçlardır.

David Jones related to Her Şeye İhtiyacınız Olduğunda Tam DN'yi Okuma

David Jones

Baş Yazılım Mühendisi, Agorus Build

Vaka çalışmasını görüntüle

Rastgele Konu ve Veren Alanlarını Nasıl Çıkarırsınız?

GetSubjectField(string) ve GetIssuerField(string) yöntemleri, kısa adlar veya sayısal OID'leri kabul eder. Bu yöntemler büyük/küçük harf duyarlı değildir ve alan mevcut değilse null döndürür.

Desteklenen kısa adlar: CN, O, OU, C, L, ST, E, SERIALNUMBER, SURNAME, T, GIVENNAME, UID, ORGANIZATIONIDENTIFIER.

Herhangi Bir Konu Alanını Okuma (eIDAS OID'leri Dahil)

Konu DN'den herhangi bir alanı çekmek için "OU" gibi bir kısa ad veya "2.5.4.97" (eIDAS organizationIdentifier) gibi bir sayısal OID geçirin.

:path=/static-assets/pdf/content-code-examples/how-to/verify-pdf-signatures-field-subject.cs
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"}");
}
Imports IronPdf
Imports IronPdf.Signing.Inspection

Dim pdf = PdfDocument.FromFile("eidas-contract.pdf")

For Each sig In pdf.GetVerifiedSignatures()
    Dim cert = sig.SignerCertificate
    If cert Is Nothing Then Continue For

    ' Short-name lookups (case-insensitive)
    Dim orgUnit As String = cert.GetSubjectField("OU")
    Dim surname As String = cert.GetSubjectField("SURNAME")
    Dim givenName As String = cert.GetSubjectField("GIVENNAME")
    Dim title As String = cert.GetSubjectField("T")

    ' Numeric OID lookup (eIDAS organizationIdentifier)
    Dim orgId As String = cert.GetSubjectField("2.5.4.97")

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

Sayısal OID aramaları, eIDAS ve kuruluş kimliklerini, mesleki nitelikleri veya standart kısa adlarla kapsanmayan yargı alanına özgü alanları ekleyen düzenlenmiş endüstri sertifikaları için esastır.

Verenin Alanlarını Okuma

GetIssuerField, veren CA'nın Ayırt Edilmiş İsmi üzerinde aynı şekilde çalışır. Bu, güven doğrulama, CA raporlaması ve imzaların verici otoriteye göre gruplandırılması için yararlıdır.

:path=/static-assets/pdf/content-code-examples/how-to/verify-pdf-signatures-field-issuer.cs
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})");
}
Imports IronPdf
Imports IronPdf.Signing.Inspection

Dim pdf = PdfDocument.FromFile("eidas-contract.pdf")

For Each sig In pdf.GetVerifiedSignatures()
    Dim cert = sig.SignerCertificate
    If cert Is Nothing Then Continue For

    ' GetIssuerField works the same way as GetSubjectField
    Dim issuerCN As String = cert.GetIssuerField("CN")
    Dim issuerO As String = cert.GetIssuerField("O")
    Dim issuerCountry As String = cert.GetIssuerField("C")

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

Sertifika Geçerliliğini Nasıl Kontrol Edersiniz?

SignerCertificateInfo iki geçerlilik yardımcısı sağlar:

  • IsExpired, DateTime.UtcNow > NotAfter ise true döndürür.
  • IsValidAt(DateTime), verilen zaman damgası NotAfter penceresi içinde ise true döndürür. Genel kullanım, sertifikanın imzalama sırasında geçerli olduğunu doğrulamaktır.
:path=/static-assets/pdf/content-code-examples/how-to/verify-pdf-signatures-validity.cs
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}");
}
Imports IronPdf
Imports IronPdf.Signing.Inspection

Dim pdf = PdfDocument.FromFile("archived-contract.pdf")

For Each sig In pdf.GetVerifiedSignatures()
    Dim cert = sig.SignerCertificate
    If cert Is Nothing Then Continue For

    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
    Dim validAtSigning As Boolean = cert.IsValidAt(sig.SigningDate)
    Console.WriteLine($"Valid at signing time ({sig.SigningDate}): {validAtSigning}")
Next
$vbLabelText   $csharpLabel

İpuçlarıGeçerlilik tarihleri sertifikadan çıkarılamadığında IsExpired false (değil true) döndürür. Yardımcı kasıtlı olarak temkinlidir; yalnızca meta veriler eksik olduğu için süresinin dolduğunu varsaymaz. Sıfır güven iş akışları için, eksik geçerlilik tarihlerini açıkça bir hata durumu olarak ele alın.

Denetim izleri için, hem IsExpired kontrolünü (geçerli geçerlilik) hem de IsValidAt(signingDate) kontrolünü (imzalama anındaki geçerlilik) kaydedin. Sonrasında süresi dolmuş bir sertifika hala belgenin imzalandığı sırada geçerli olabilir; her iki veri noktası da uyumluluk açısından önemlidir.

Sertifika Sabitleme İçin SHA-256 Parmak İzini Nasıl Kullanırsınız?

Sha256Thumbprint özelliği, DER kodlu sertifikanın SHA-256 karması olan 64 karakterli büyük harfli bir hex dizisini döndürür. Bu, kabul edilen imzalayan sertifikaların bilinen iyi listesine karşı sabitlediğiniz değerdir.

:path=/static-assets/pdf/content-code-examples/how-to/verify-pdf-signatures-thumbprint-pinning.cs
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}");
}
Imports IronPdf
Imports IronPdf.Signing.Inspection
Imports System.Collections.Generic

' Known-good signer thumbprints from a compliance database
Dim pinnedThumbprints As New HashSet(Of String) From {
    "A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2",
    "F6E5D4C3B2A1F6E5D4C3B2A1F6E5D4C3B2A1F6E5D4C3B2A1F6E5D4C3B2A1F6E5"
}

Dim pdf = PdfDocument.FromFile("submitted-form.pdf")

For Each sig In pdf.GetVerifiedSignatures()
    Dim cert = sig.SignerCertificate
    If cert Is Nothing Then Continue For

    ' Pin against trusted thumbprint list
    Dim trusted As Boolean = pinnedThumbprints.Contains(cert.Sha256Thumbprint)
    Console.WriteLine($"Signer: {cert.CommonName}, Thumbprint: {cert.Sha256Thumbprint}")
    Console.WriteLine($"Pinned: {trusted}")
Next
$vbLabelText   $csharpLabel

Ham Sertifika Verilerinden X509Certificate2 Nasıl Oluşturursunuz?

RawData özelliği, DER kodlamalı sertifikayı bir byte[] olarak döndürür. Her çağrı savunma kopyası döndürür, böylece dahili veriler referans olarak hiçbir zaman açığa çıkmaz. Bu veriyle, .NET'in yerel kriptografik API'leriyle (zincir oluşturma, politika doğrulama, CRL kontrolü) etkileşim için bir System.Security.Cryptography.X509Certificates.X509Certificate2 oluşturabilirsiniz.

:path=/static-assets/pdf/content-code-examples/how-to/verify-pdf-signatures-x509-interop.cs
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");
}
Imports IronPdf
Imports IronPdf.Signing.Inspection
Imports System.Security.Cryptography.X509Certificates

Dim pdf = PdfDocument.FromFile("signed-report.pdf")

For Each sig In pdf.GetVerifiedSignatures()
    Dim cert = sig.SignerCertificate
    If cert Is Nothing Then Continue For

    ' Construct X509Certificate2 from defensive DER copy
    Dim derBytes As Byte() = cert.RawData
    Dim 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")
Next
$vbLabelText   $csharpLabel

Lütfen dikkate alınHer RawData erişimi, taze bir savunma kopyası döndürür. Dahili bayt dizisi, referans olarak hiçbir zaman açığa çıkmaz, böylece döndürülen baytları değiştirmek sonraki çağrıları etkilemez.

Bu etkileşim yolu, IronPDF'nin imza doğrulamasını X509Chain.Build() gibi mevcut .NET sertifika doğrulama hatlarına, CRL/OCSP üzerinden iptal kontrolüne veya özel X509CertificateValidator uygulamalarına takmanıza olanak tanır.

Sertifika Zincirini Nasıl Yürürsünüz?

VerifiedSignature üzerindeki CertificateChain özelliği, imzalayan → ara CA(lar) → kök CA'dan sıralanmış bir IReadOnlyList<SignerCertificateInfo> döndürür. İndeks 0 her zaman imzalayan sertifikadır (aynı nesne SignerCertificate olarak). Liste asla null değildir; eğer zincir çıkarılamazsa, yalnızca imzalayan sertifikayı içerir.

:path=/static-assets/pdf/content-code-examples/how-to/verify-pdf-signatures-chain-walking.cs
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}");
    }
}
Imports IronPdf
Imports IronPdf.Signing.Inspection

Dim pdf = PdfDocument.FromFile("enterprise-signed.pdf")

For Each 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 i As Integer = 0 To sig.CertificateChain.Count - 1
        Dim cert = sig.CertificateChain(i)
        Dim role As String = If(i = 0, "Signer", If(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}")
    Next
Next
$vbLabelText   $csharpLabel

Lütfen dikkate alınZincirdeki her SignerCertificateInfo, SignerCertificate ile aynı özellikleri gösterir: kimlik alanları, geçerlilik, parmak izi, RawData, GetSubjectField() ve GetIssuerField(). Her ara CA'nın süresini doğrulayabilir, kökün parmak izini güvenilir kök depolarınıza karşı kontrol edebilir ve uyumluluk denetimleri için tam zinciri kaydedebilirsiniz.

Sonraki Adımlar

SignerCertificate ve CertificateChain, IronPDF API yüzeyinden ayrılmadan tam X.509 incelemesi sağlar. Buradan, bu özelliklerin yerleştirdiği IronPDF'nin parçalarına daha derinlemesine gitmek doğal bir sonraki harekettir.

İş akışının imzalama tarafı için, dijital imzalar nasıl yapılır bölümü, sertifika oluşturma, meta veriler ve artımlı imzalama konularını ele alır. Yüksek güvenlikli ortamlarda HSM tabanlı imzalama için, HSM imzalama kılavuzu, PKCS#11 entegrasyonunu kapsar. Çalıştırmaya hazır parçacıklara mı ihtiyacınız var? dijital imzalar kod örneği onları sağlar.

Kendi imzalanmış PDF'lerinizde denemeye hazır mısınız? Ücretsiz 30 günlük denemenize başlayın veya lisanslama seçeneklerini görüntüleyin.

Sıkça Sorulan Sorular

PDF imzalarından X.509 sertifika detaylarını okumanın amacı nedir?

PDF imzalarından X.509 sertifika detaylarını okumak, imzalayanın kimliğini doğrulamanızı, sertifikanın geçerliliğini kontrol etmenizi ve eIDAS gibi standartlara uyumluluğu sağlamanızı mümkün kılar. Bu işlem, belgelerin doğruluğunu ve bütünlüğünü korumak için gereklidir.

IronPDF, PDF imzalarından imzalayan kimliğini nasıl çıkartır?

IronPDF, PDF imzalarından imzalayan kimliğini X.509 sertifika detaylarına erişerek çıkartan araçlar sunar, bu da belgenin kaynağını doğrulamayı ve imzalayanın kimlik bilgilerini önemsimayi kolaylaştırır.

IronPDF, PDF imzalarından eIDAS alanları çıkartabilir mi?

Evet, IronPDF PDF imzalarından eIDAS alanlarını çıkartabilir, bu da geliştiricilerin belgelerin Avrupa Birliği'nin elektronik imza ile ilgili düzenlemelerine uyumluluğunu sağlamasını mümkün kılar.

IronPDF kullanarak PDF imzasından hangi bilgiler elde edilebilir?

IronPDF kullanarak, PDF imzasından imzalayan kimliği, sertifika geçerliliği, parmak izi ve sertifika zinciri gibi bilgileri alabilir, imzanın doğruluğunu ayrıntılı şekilde anlayabilirsiniz.

IronPDF kullanarak bir PDF imzasının geçerliliğini doğrulamak mümkün mü?

Evet, IronPDF, X.509 sertifika detaylarını inceleyerek PDF imzasının geçerliliğini doğrulamanıza olanak tanır; buna, son kullanma tarihlerini kontrol etmek ve imzalama sertifikasının bütünlüğünü sağlamak dahildir.

PDF imza doğrulaması için IronPDF kullanmanın faydaları nelerdir?

IronPDF kullanarak PDF imza doğrulaması yapmak, ayrıntılı sertifika bilgilerinin otomatik olarak çıkarılması, C# uygulamaları ile uyumluluk ve eIDAS gibi uluslararası standartlara uyum gibi faydalar sağlar.

IronPDF, PDF imzalarından parmak izi çıkarmayı nasıl yönetir?

IronPDF, X.509 sertifika detaylarına PDF imzası içinde erişerek parmak izi çıkarmayı yönetir, böylece siz de sertifikanın benzersiz parmak izi ile doğruluğunu ve bütünlüğünü doğrulayabilirsiniz.

IronPDF, PDF imzasından bir sertifika zinciri sağlayabilir mi?

IronPDF, PDF imzasından bir sertifika zinciri sağlayabilir; bu, imzalayanın sertifikasından güvenilen kök sertifikasına kadar olan güven yolunu izlemenize yardımcı olur, imzanın geçerliliğini sağlar.

IronPDF, PDF imzalarını okumak için hangi programlama dilini destekler?

IronPDF, PDF imzalarını okumak ve doğrulamak için C#'ı destekler, bu da .NET ekosisteminde çalışan geliştiriciler için ideal bir çözüm sunar.

IronPDF, elektronik imzalar için uluslararası standartlarla uyumlu mu?

Evet, IronPDF, eIDAS gibi uluslararası standartlarla uyumludur, böylece PDF imza doğrulama süreçlerinizin elektronik imzalarla ilgili düzenleyici gereksinimleri karşıladığından emin olabilirsiniz.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 19,936,792 | Sürüm: 2026.7 yeni yayınlandı
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz? PM > Install-Package IronPdf
bir örnek çalıştır HTML'nizi bir PDF'ye dönüştüğünü izleyin.