Diese Seite kann automatisch übersetzten Text enthalten.

Überprüfen Sie die PDF-Signatur in C# und VB.NET

Mit digitalen Signaturen in PDF-Dokumenten können Sie erkennen, ob das PDF manipuliert wurde. Sie können die Docotic.Pdf-Bibliothek verwenden, um digitale Signaturen in PDF-Dateien zu überprüfen. Die Bibliothek kann Ihnen beim Lesen von Signatureigenschaften in .NET Framework- und .NET Core-Anwendungen helfen. Holen Sie sich den kostenlosen, zeitlich begrenzten Lizenzschlüssel hier, um die Bibliothek ohne Einschränkungen im Testmodus auszuprobieren.

Überprüfen Sie die digitale Signatur im PDF

Validieren Sie die digitale Signatur in PDF mit C#

Die Bibliothek Docotic.Pdf bietet die Möglichkeit, zu überprüfen, ob der signierte Teil eines Dokuments nach dem Signieren geändert wurde. Sie können überprüfen, ob eine Signatur eingebettete OCSP- und/oder CRL-Daten enthält. Und für jede Signatur ist es möglich zu überprüfen, ob ihr Signaturzertifikat zu einem bestimmten Datum widerrufen wurde.

Docotic.Pdf-Bibliothek 9.3.16887-dev Regressionstests 14,635 bestanden NuGet-Downloads insgesamt 4,075,269

Das folgende C#-Beispiel zeigt, wie eine PDF-Signatur überprüft und der Widerruf des Signaturzertifikats überprüft wird:

using BitMiracle.Docotic.Pdf;

using (var pdf = new PdfDocument("signed.pdf"))
{
    PdfControl field = pdf.GetControls().FirstOrDefault(c => c.Type == PdfWidgetType.Signature);
    if (field == null)
    {
        Console.WriteLine("Document does not contain signature fields", "Verification result");
        return;
    }

    PdfSignature signature = ((PdfSignatureField)field).Signature;
    PdfSignatureContents contents = signature.Contents;
    Console.WriteLine("Signed part is intact: {0}", contents.VerifyDigest());

    DateTime signingTime = signature.SigningTime ?? DateTime.MinValue;
    Console.WriteLine("Signed on: {0}\n", signingTime.ToShortDateString());

    if (contents.CheckHasEmbeddedOcsp())
    {
        Console.WriteLine("Signature has OCSP embedded.");
        checkRevocation(signature, PdfCertificateRevocationCheckMode.EmbeddedOcsp);
    }

    if (contents.CheckHasEmbeddedCrl())
    {
        Console.WriteLine("Signature has CRL embedded.");
        checkRevocation(signature, PdfCertificateRevocationCheckMode.EmbeddedCrl);
    }

    checkRevocation(signature, PdfCertificateRevocationCheckMode.OnlineOcsp);
    checkRevocation(signature, PdfCertificateRevocationCheckMode.OnlineCrl);

    if (contents.Timestamp != null)
    {
        Console.WriteLine("Signature has timestamp embedded.");
        Console.WriteLine("Timestamp: {0}", contents.Timestamp);
        Console.WriteLine("Timestamp is intact: {0}", contents.VerifyTimestamp());
    }
}

private static void checkRevocation(PdfSignature signature, PdfCertificateRevocationCheckMode mode)
{
    PdfSignatureContents contents = signature.Contents;
    DateTime signingTime = signature.SigningTime ?? DateTime.MinValue;

    foreach (DateTime time in new DateTime[] { signingTime, DateTime.UtcNow })
    {
        bool revoked = contents.CheckIfRevoked(mode, time);
        string status = revoked ? "Revoked" : "Valid";
        string date = time.ToShortDateString();
        Console.WriteLine("Checking using {0} mode: {1} on {2}", mode, status, date);
    }
}

Auf GitHub können Sie die vollständigen Beispiele für PDF-Signatur überprüfen in C# und VB.NET herunterladen und ausprobieren.

PDF-Signatureigenschaften in C# lesen

Docotic.Pdf kann Signatureigenschaften wie den Namen des Unterzeichners, den Zeitpunkt der Unterzeichnung und die Kontaktinformationen des Unterzeichners lesen. Es ist auch möglich, auf das in der Signatur eingebettete Signaturzertifikat zuzugreifen. Die Bibliothek kann auch das Ausstellerzertifikat für das Signaturzertifikat abrufen, wenn es in die Signatur eingebettet ist.

Dieses Beispiel zeigt, wie die Signatur und die entsprechenden Zertifikatseigenschaften in C# gelesen werden:

using (var pdf = new PdfDocument("signed.pdf"))
{
    PdfControl control = pdf.GetControls().FirstOrDefault(c => c.Type == PdfWidgetType.Signature);
    if (control == null)
    {
        Console.WriteLine("Document does not contain signature fields");
        return;
    }

    PdfSignatureField field = (PdfSignatureField)control;
    Console.WriteLine("Signature field is invisible: {0}", isInvisible(field));

    PdfSignature signature = field.Signature;
    Console.WriteLine("Signed by: {0}", signature.Name);
    Console.WriteLine("Signing time: {0}", signature.SigningTime);
    Console.WriteLine("Signed at: {0}", signature.Location);
    Console.WriteLine("Reason for signing: {0}", signature.Reason);
    Console.WriteLine("Signer's contact: {0}", signature.ContactInfo);

    PdfSignatureContents contents = signature.Contents;
    Console.WriteLine("Has OCSP embedded: {0}", contents.CheckHasEmbeddedOcsp());
    Console.WriteLine("Has CRL embedded: {0}", contents.CheckHasEmbeddedCrl());

    PdfSignatureCertificate certificate = contents.GetSigningCertificate();
    Console.WriteLine("== Signing certificate:");
    Console.WriteLine("Name: {0}", certificate.Name);
    Console.WriteLine("Algorithm: {0}", certificate.AlgorithmName);
    Console.WriteLine("Subject DN: {0}", certificate.Subject.Name);
    Console.WriteLine("Issuer DN: {0}", certificate.Issuer.Name);
    Console.WriteLine("Serial number: {0}", certificate.SerialNumber);
    Console.WriteLine("Valid from {0} up to {1}", certificate.ValidFrom, certificate.ValidUpto);
    Console.WriteLine("Timestamp Authority URL: {0}", certificate.GetTimestampAuthorityUrl());

    PdfSignatureCertificate issuer = contents.GetIssuerCertificateFor(certificate);
    Console.WriteLine("== Issuer certificate:");
    Console.WriteLine("Subject DN: {0}", issuer.Subject.Name);
    Console.WriteLine("Issuer DN: {0}", issuer.Issuer.Name);
    Console.WriteLine("Serial number: {0}", issuer.SerialNumber);
}

private static bool isInvisible(PdfSignatureField field)
{
    return (field.Width == 0 && field.Height == 0) ||
            field.Flags.HasFlag(PdfWidgetFlags.Hidden) ||
            field.Flags.HasFlag(PdfWidgetFlags.NoView);
}

Laden Sie die vollständigen PDF-Signatureigenschaften in C#- und VB.NET-Beispielen lesen von GitHub herunter und probieren Sie sie aus.