Zum Fußzeileninhalt springen
IRONPDF NUTZEN

Hinzufügen von digitalen PDF-Signaturen in ASP.NET Core

Durch das Hinzufügen einer digitalen Signatur zu einer PDF-Datei in ASP.NET Core wird die Integrität des Dokuments geschützt, die Identität des Unterzeichners bestätigt und die Datei in den meisten Rechtsordnungen rechtlich angreifbar gemacht. Mit IronPDF können Sie PDFs serverseitig mithilfe von Zertifikatsdateien signieren, sichtbare Signaturbilder hinzufügen und interaktive Signaturformularfelder einbetten – alles innerhalb weniger Zeilen C#-Code.

Installieren Sie die Bibliothek von NuGet, besorgen Sie sich Ihr .pfx-Zertifikat und folgen Sie den unten stehenden Beispielen, um einen produktionsreifen Workflow für die Dokumentensignierung zu erstellen.

Install-Package IronPdf
dotnet add package IronPdf
Install-Package IronPdf
dotnet add package IronPdf
SHELL

Sie können es auch über den NuGet Paketmanager in Visual Studio installieren oder es direkt von der IronPDF -Produktseite herunterladen. Starten Sie eine kostenlose Testphase und testen Sie alle Signierfunktionen unverbindlich.

Was ist eine digitale PDF-Signatur und warum ist sie wichtig?

Eine digitale Signatur ist ein kryptografischer Mechanismus, der die Identität des Unterzeichners mit einer bestimmten Version eines Dokuments verknüpft. Sie unterscheidet sich von einer einfachen elektronischen Signatur – wie etwa einem getippten Namen oder einem eingescannten Bild – dadurch, dass sie Public-Key-Kryptographie verwendet, um ein überprüfbares, fälschungssicheres Siegel zu erstellen.

Wenn jemand ein PDF digital signiert, erzeugt die Signatursoftware einen Hashwert des Dokumentinhalts und verschlüsselt diesen Hashwert mit dem privaten Schlüssel des Unterzeichners. Die resultierende Signatur wird zusammen mit dem öffentlichen Zertifikat des Unterzeichners in die PDF-Datei eingebettet. Jeder PDF-Reader, der digitale Signaturen unterstützt – einschließlich Adobe Acrobat Reader und in moderne Browser integrierte PDF-Viewer – kann den Hash mit dem öffentlichen Schlüssel entschlüsseln und ihn mit einem neu berechneten Hash des Dokuments vergleichen. Stimmen die Hashwerte überein, ist das Dokument authentisch und unverändert.

Warum digitale Signaturen rechtlich wichtig sind

In den meisten Ländern haben digital signierte Dokumente die gleiche Rechtskraft wie handsignierte Papierverträge. Die eIDAS-Verordnung in der Europäischen Union und der ESIGN Act in den Vereinigten Staaten erkennen elektronische Signaturen beide als rechtsverbindlich an, wenn bestimmte Bedingungen erfüllt sind. Zertifikatsbasierte digitale Signaturen erfüllen die strengsten dieser Anforderungen.

Wo digitale Signaturen in ASP.NET Core ihren Platz finden

Serverseitiges Signieren innerhalb einer ASP.NET Core Anwendung ermöglicht das automatische Signieren von Dokumenten während der Verarbeitung – es ist keine Client-Software erforderlich. Verträge, Rechnungen, Compliance-Berichte und Geheimhaltungsvereinbarungen können alle direkt nach ihrer Erstellung unterzeichnet werden, und die unterzeichnete Datei kann entweder direkt an den Benutzer zurückgesendet oder in einem Dokumentenmanagementsystem gespeichert werden. IronPDF übernimmt den gesamten Prozess, von der HTML-zu-PDF-Konvertierung bis zur kryptografischen Signatur, sodass Sie den Workflow implementieren können, ohne sich mit Details der PDF-Spezifikation auseinandersetzen zu müssen.

Wie installiert man IronPDF in einem ASP.NET Core -Projekt?

Der schnellste Weg zu einer funktionierenden Signaturumgebung führt über das NuGet Paket. Öffnen Sie die Paketmanager-Konsole in Visual Studio und führen Sie den Befehl aus:

Install-Package IronPdf
dotnet add package IronPdf
Install-Package IronPdf
dotnet add package IronPdf
SHELL

Alternativ können Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt klicken, " NuGet Pakete verwalten" auswählen, nach IronPdf suchen und auf "Installieren" klicken. Fügen Sie nach der Installation die folgenden using Direktiven am Anfang Ihrer Controller- oder Serviceklasse hinzu:

using IronPdf;
using IronPdf.Signing;
using IronPdf;
using IronPdf.Signing;
Imports IronPdf
Imports IronPdf.Signing
$vbLabelText   $csharpLabel

IronPDF zielt auf .NET 8 und .NET 9/10 ab und fügt sich daher nahtlos in moderne ASP.NET Core Projekte ein. Eine detaillierte Anleitung zur erstmaligen Einrichtung finden Sie im IronPDF Schnellstartleitfaden .

Wie signiert man eine PDF-Datei mit einer Zertifikatsdatei in ASP.NET Core?

Die gängigste Methode zum Signieren von Zertifikaten verwendet eine Zertifikatsdatei im Format .pfx oder .p12. Diese Dateien bündeln den privaten Schlüssel und die öffentliche Zertifikatskette in einem einzigen passwortgeschützten Archiv. Sie können ein solches Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle (CA) wie DigiCert oder GlobalSign beziehen oder für Entwicklungs- und Testzwecke ein selbstsigniertes Zertifikat erstellen.

Das folgende Beispiel generiert aus HTML eine PDF-Datei und wendet eine zertifikatsbasierte digitale Signatur an:

using IronPdf;
using IronPdf.Signing;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/sign-with-certificate", (IWebHostEnvironment env) =>
{
    // Generate a PDF from HTML content
    var renderer = new ChromePdfRenderer();
    var document = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions...</p>");

    // Locate the PFX certificate on the server
    string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");

    // Build the signature object
    var signature = new PdfSignature(certPath, "yourPassword")
    {
        SigningContact = "legal@yourcompany.com",
        SigningLocation = "Chicago, IL, USA",
        SigningReason = "Document Approval"
    };

    // Apply the signature and save
    document.Sign(signature);
    string outputPath = Path.Combine(Path.GetTempPath(), "signed-contract.pdf");
    document.SaveAs(outputPath);

    return Results.File(outputPath, "application/pdf", "signed-contract.pdf");
});

app.Run();
using IronPdf;
using IronPdf.Signing;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/sign-with-certificate", (IWebHostEnvironment env) =>
{
    // Generate a PDF from HTML content
    var renderer = new ChromePdfRenderer();
    var document = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions...</p>");

    // Locate the PFX certificate on the server
    string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");

    // Build the signature object
    var signature = new PdfSignature(certPath, "yourPassword")
    {
        SigningContact = "legal@yourcompany.com",
        SigningLocation = "Chicago, IL, USA",
        SigningReason = "Document Approval"
    };

    // Apply the signature and save
    document.Sign(signature);
    string outputPath = Path.Combine(Path.GetTempPath(), "signed-contract.pdf");
    document.SaveAs(outputPath);

    return Results.File(outputPath, "application/pdf", "signed-contract.pdf");
});

app.Run();
Imports IronPdf
Imports IronPdf.Signing
Imports Microsoft.AspNetCore.Mvc

Dim builder = WebApplication.CreateBuilder(args)
Dim app = builder.Build()

app.MapPost("/sign-with-certificate", Function(env As IWebHostEnvironment)
    ' Generate a PDF from HTML content
    Dim renderer = New ChromePdfRenderer()
    Dim document = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions...</p>")

    ' Locate the PFX certificate on the server
    Dim certPath As String = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx")

    ' Build the signature object
    Dim signature = New PdfSignature(certPath, "yourPassword") With {
        .SigningContact = "legal@yourcompany.com",
        .SigningLocation = "Chicago, IL, USA",
        .SigningReason = "Document Approval"
    }

    ' Apply the signature and save
    document.Sign(signature)
    Dim outputPath As String = Path.Combine(Path.GetTempPath(), "signed-contract.pdf")
    document.SaveAs(outputPath)

    Return Results.File(outputPath, "application/pdf", "signed-contract.pdf")
End Function)

app.Run()
$vbLabelText   $csharpLabel

ChromePdfRenderer wandelt jede gültige HTML-Zeichenkette oder URL in ein PDF um. Der Konstruktor PdfSignature akzeptiert den Zertifikatspfad und das Passwort, und die optionalen Eigenschaften (SigningContact, SigningLocation, SigningReason) fügen Metadaten hinzu, die PDF-Viewer im Signaturfeld anzeigen. Die Methode Sign bettet die kryptografische Signatur ein, und SaveAs schreibt die signierte Datei auf die Festplatte.

Zurückgeben der signierten Datei aus dem Speicher

Wenn Sie keine temporäre Datei auf der Festplatte speichern möchten, speichern Sie die PDF-Datei unter MemoryStream und geben Sie sie direkt von der Controller-Aktion zurück:

var stream = new MemoryStream();
document.SaveAs(stream);
stream.Position = 0;
return Results.File(stream, "application/pdf", "signed-contract.pdf");
var stream = new MemoryStream();
document.SaveAs(stream);
stream.Position = 0;
return Results.File(stream, "application/pdf", "signed-contract.pdf");
Dim stream As New MemoryStream()
document.SaveAs(stream)
stream.Position = 0
Return Results.File(stream, "application/pdf", "signed-contract.pdf")
$vbLabelText   $csharpLabel

Dieser Ansatz eignet sich für APIs mit hohem Durchsatz, bei denen die Verwaltung temporärer Dateien unnötigen Mehraufwand verursachen würde.

Eine vollständige Referenz der Eigenschaften finden Sie in der PdfSignature API-Dokumentation .

Wie fügt man ein sichtbares Signaturbild in eine PDF-Datei ein?

Kryptografische Signaturen schützen die Integrität von Dokumenten, sind aber im gerenderten PDF unsichtbar. Viele Arbeitsabläufe – insbesondere solche, die Verträge oder Briefe betreffen – erfordern auch eine sichtbare Darstellung, wie zum Beispiel eine eingescannte handschriftliche Unterschrift oder einen Firmenstempel, der auf das Papier gedruckt wird.

IronPDF unterstützt dies durch die Methode LoadSignatureImageFromFile. Die Methode akzeptiert einen Bildpfad, einen Seitenindex und ein IronSoftware.Drawing.Rectangle, das die Position und die Abmessungen der sichtbaren Signatur definiert:

using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/sign-with-visible-image", (IWebHostEnvironment env) =>
{
    // Load an existing PDF (for example, an invoice template)
    string pdfPath = Path.Combine(env.ContentRootPath, "Documents", "invoice.pdf");
    var document = PdfDocument.FromFile(pdfPath);

    // Paths to the certificate and the signature image
    string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");
    string imagePath = Path.Combine(env.ContentRootPath, "Images", "signature.png");

    // Define where the visible signature appears (x, y, width, height in points)
    var signatureArea = new Rectangle(50, 680, 200, 80);

    var signature = new PdfSignature(certPath, "yourPassword");
    signature.LoadSignatureImageFromFile(imagePath, pageIndex: 0, signatureArea);

    document.Sign(signature);
    string outputPath = Path.Combine(Path.GetTempPath(), "signed-invoice.pdf");
    document.SaveAs(outputPath);

    return Results.File(outputPath, "application/pdf", "signed-invoice.pdf");
});

app.Run();
using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/sign-with-visible-image", (IWebHostEnvironment env) =>
{
    // Load an existing PDF (for example, an invoice template)
    string pdfPath = Path.Combine(env.ContentRootPath, "Documents", "invoice.pdf");
    var document = PdfDocument.FromFile(pdfPath);

    // Paths to the certificate and the signature image
    string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");
    string imagePath = Path.Combine(env.ContentRootPath, "Images", "signature.png");

    // Define where the visible signature appears (x, y, width, height in points)
    var signatureArea = new Rectangle(50, 680, 200, 80);

    var signature = new PdfSignature(certPath, "yourPassword");
    signature.LoadSignatureImageFromFile(imagePath, pageIndex: 0, signatureArea);

    document.Sign(signature);
    string outputPath = Path.Combine(Path.GetTempPath(), "signed-invoice.pdf");
    document.SaveAs(outputPath);

    return Results.File(outputPath, "application/pdf", "signed-invoice.pdf");
});

app.Run();
Imports IronPdf
Imports IronPdf.Signing
Imports IronSoftware.Drawing
Imports Microsoft.AspNetCore.Mvc

Dim builder = WebApplication.CreateBuilder(args)
Dim app = builder.Build()

app.MapPost("/sign-with-visible-image", Function(env As IWebHostEnvironment)
    ' Load an existing PDF (for example, an invoice template)
    Dim pdfPath As String = Path.Combine(env.ContentRootPath, "Documents", "invoice.pdf")
    Dim document = PdfDocument.FromFile(pdfPath)

    ' Paths to the certificate and the signature image
    Dim certPath As String = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx")
    Dim imagePath As String = Path.Combine(env.ContentRootPath, "Images", "signature.png")

    ' Define where the visible signature appears (x, y, width, height in points)
    Dim signatureArea As New Rectangle(50, 680, 200, 80)

    Dim signature As New PdfSignature(certPath, "yourPassword")
    signature.LoadSignatureImageFromFile(imagePath, pageIndex:=0, signatureArea)

    document.Sign(signature)
    Dim outputPath As String = Path.Combine(Path.GetTempPath(), "signed-invoice.pdf")
    document.SaveAs(outputPath)

    Return Results.File(outputPath, "application/pdf", "signed-invoice.pdf")
End Function)

app.Run()
$vbLabelText   $csharpLabel

Das sichtbare Signaturbild wird an den von Ihnen angegebenen Koordinaten auf der ausgewählten Seite eingefügt. Die kryptografische Signatur wird gleichzeitig auf das gesamte Dokument angewendet, sodass Sie in einem einzigen Vorgang sowohl Sicherheit als auch visuelle Bestätigung erhalten.

Wenn sich das Bild im Arbeitsspeicher befindet (z. B. aus einer Datenbank oder einem Cloud-Speicher abgerufen wurde), verwenden Sie stattdessen LoadSignatureImageFromStream. Für einen detaillierteren Einblick in die Möglichkeiten der visuellen Signatur konsultieren Sie bitte die PDF-Anleitung zur Signaturerstellung .

Wie erstellt man Signaturformularfelder für externe Unterzeichner?

In manchen Arbeitsabläufen wird das Dokument von Ihrem System erstellt, muss aber von einer externen Partei – einem Kunden, einem Partner oder einer Aufsichtsbehörde – unterzeichnet werden. Anstatt von der betreffenden Partei im Voraus eine Bescheinigung einzuholen, betten Sie ein spezielles Signaturformularfeld in das PDF ein und senden das Dokument an sie. Die Empfänger öffnen die PDF-Datei in Adobe Acrobat Reader oder einem anderen kompatiblen Anzeigeprogramm, klicken auf das Signaturfeld und fügen ihr eigenes Zertifikat oder ihre elektronische Signatur hinzu.

using IronPdf;
using IronPdf.Forms;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/generate-signable-form", (IWebHostEnvironment env) =>
{
    // Render the document that requires a client signature
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(@"
        <h1>Client Service Agreement</h1>
        <p>Please review the terms below and sign in the field provided.</p>
        <p>By signing, you confirm acceptance of all listed terms and conditions.</p>
    ");

    // Define the signature field: name, page, x, y, width, height (in points)
    var signatureField = new SignatureFormField(
        "ClientSignature",
        pageIndex: 0,
        x: 50,
        y: 600,
        width: 300,
        height: 100
    );

    pdf.Form.Add(signatureField);

    string outputPath = Path.Combine(Path.GetTempPath(), "client-agreement.pdf");
    pdf.SaveAs(outputPath);

    return Results.File(outputPath, "application/pdf", "client-agreement.pdf");
});

app.Run();
using IronPdf;
using IronPdf.Forms;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/generate-signable-form", (IWebHostEnvironment env) =>
{
    // Render the document that requires a client signature
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(@"
        <h1>Client Service Agreement</h1>
        <p>Please review the terms below and sign in the field provided.</p>
        <p>By signing, you confirm acceptance of all listed terms and conditions.</p>
    ");

    // Define the signature field: name, page, x, y, width, height (in points)
    var signatureField = new SignatureFormField(
        "ClientSignature",
        pageIndex: 0,
        x: 50,
        y: 600,
        width: 300,
        height: 100
    );

    pdf.Form.Add(signatureField);

    string outputPath = Path.Combine(Path.GetTempPath(), "client-agreement.pdf");
    pdf.SaveAs(outputPath);

    return Results.File(outputPath, "application/pdf", "client-agreement.pdf");
});

app.Run();
Imports IronPdf
Imports IronPdf.Forms
Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Hosting
Imports Microsoft.Extensions.Hosting

Dim builder = WebApplication.CreateBuilder(args)
Dim app = builder.Build()

app.MapGet("/generate-signable-form", Function(env As IWebHostEnvironment)
    ' Render the document that requires a client signature
    Dim renderer = New ChromePdfRenderer()
    Dim pdf = renderer.RenderHtmlAsPdf("
        <h1>Client Service Agreement</h1>
        <p>Please review the terms below and sign in the field provided.</p>
        <p>By signing, you confirm acceptance of all listed terms and conditions.</p>
    ")

    ' Define the signature field: name, page, x, y, width, height (in points)
    Dim signatureField = New SignatureFormField(
        "ClientSignature",
        pageIndex:=0,
        x:=50,
        y:=600,
        width:=300,
        height:=100
    )

    pdf.Form.Add(signatureField)

    Dim outputPath As String = Path.Combine(Path.GetTempPath(), "client-agreement.pdf")
    pdf.SaveAs(outputPath)

    Return Results.File(outputPath, "application/pdf", "client-agreement.pdf")
End Function)

app.Run()
$vbLabelText   $csharpLabel

Die Konstruktorparameter SignatureFormField werden direkt der Position des Feldes auf der Seite zugeordnet. Beim Öffnen der PDF-Datei sieht der Empfänger ein deutlich abgegrenztes Feld, in dem seine Unterschrift erfolgen soll. Das ausgefüllte Formular kann dann an Ihr System zurückgesendet werden, wo Sie es laden, die eingebettete Signatur überprüfen und es archivieren können.

Weitere Informationen zur Bearbeitung von PDF-Formularen – einschließlich des Auslesens übermittelter Formulardaten – finden Sie im Leitfaden zur Bearbeitung von PDF-Formularen .

Wie lässt sich eine digitale Signatur programmatisch verifizieren?

Nachdem ein Dokument unterschrieben und zurückgesandt wurde, müssen Sie möglicherweise überprüfen, ob die Unterschrift noch gültig ist und ob das Dokument nicht verändert wurde. IronPDF stellt die Signaturprüfung über das PdfDocument-Objekt bereit:

using IronPdf;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/verify-signature", (IWebHostEnvironment env) =>
{
    string signedPath = Path.Combine(env.ContentRootPath, "Documents", "signed-contract.pdf");
    var document = PdfDocument.FromFile(signedPath);

    // Retrieve all embedded signatures
    var signatures = document.GetSignatures();

    foreach (var sig in signatures)
    {
        bool isValid = sig.VerifySignature();
        string status = isValid
            ? $"Valid -- signed by {sig.SignerName} on {sig.SigningTime:D}"
            : "INVALID -- document may have been tampered with";

        Console.WriteLine(status);
    }

    return Results.Ok(new { SignatureCount = signatures.Count });
});

app.Run();
using IronPdf;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/verify-signature", (IWebHostEnvironment env) =>
{
    string signedPath = Path.Combine(env.ContentRootPath, "Documents", "signed-contract.pdf");
    var document = PdfDocument.FromFile(signedPath);

    // Retrieve all embedded signatures
    var signatures = document.GetSignatures();

    foreach (var sig in signatures)
    {
        bool isValid = sig.VerifySignature();
        string status = isValid
            ? $"Valid -- signed by {sig.SignerName} on {sig.SigningTime:D}"
            : "INVALID -- document may have been tampered with";

        Console.WriteLine(status);
    }

    return Results.Ok(new { SignatureCount = signatures.Count });
});

app.Run();
Imports IronPdf
Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Hosting
Imports Microsoft.Extensions.Hosting

Dim builder = WebApplication.CreateBuilder(args)
Dim app = builder.Build()

app.MapGet("/verify-signature", Function(env As IWebHostEnvironment)
                                    Dim signedPath As String = Path.Combine(env.ContentRootPath, "Documents", "signed-contract.pdf")
                                    Dim document = PdfDocument.FromFile(signedPath)

                                    ' Retrieve all embedded signatures
                                    Dim signatures = document.GetSignatures()

                                    For Each sig In signatures
                                        Dim isValid As Boolean = sig.VerifySignature()
                                        Dim status As String = If(isValid,
                                            $"Valid -- signed by {sig.SignerName} on {sig.SigningTime:D}",
                                            "INVALID -- document may have been tampered with")

                                        Console.WriteLine(status)
                                    Next

                                    Return Results.Ok(New With {.SignatureCount = signatures.Count})
                                End Function)

app.Run()
$vbLabelText   $csharpLabel

GetSignatures() gibt eine Liste aller im PDF eingebetteten digitalen Signaturen zurück. Jedes PdfDigitalSignature-Objekt legt VerifySignature(), den Namen des Unterzeichners, den Zeitstempel der Signatur und die Zertifikatskette offen. Diese Informationen genügen, um einen Prüfpfad oder ein Dokumentenmanagement-Dashboard zu erstellen, das alle PDFs mit fehlerhaften oder abgelaufenen Signaturen kennzeichnet.

Wie handhaben Sie das Zertifikatsmanagement in der Produktion?

Das Speichern einer .pfx Datei im Dateisystem funktioniert während der Entwicklung, ist aber für den Produktiveinsatz nicht geeignet. Zertifikatsdateien enthalten private Schlüssel, und wenn die Datei kompromittiert wird, ist jedes mit diesem Schlüssel signierte Dokument gefährdet.

Verwendung von Azure Key Vault

Mit Azure Key Vault können Sie Zertifikate speichern und verwenden, ohne dass der private Schlüssel jemals den Tresor verlässt. Das .NET SDK stellt eine CertificateClient bereit, die die öffentlichen Zertifikatsinformationen herunterlädt. Für eigentliche Signiervorgänge, bei denen der private Schlüssel im Key Vault gespeichert wird, können Sie das Azure.Security.KeyVault.Keys -Paket verwenden, um die kryptografische Operation serverseitig durchzuführen.

Verwendung von Umgebungsvariablen und Geheimnissen

Bei kleineren Projekten sollte das Zertifikat als Base64-kodierte Zeichenfolge in einer Umgebungsvariablen oder im ASP.NET Core Secrets Manager gespeichert und zur Laufzeit dekodiert werden:

string certBase64 = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT")
    ?? throw new InvalidOperationException("PDF_SIGNING_CERT environment variable is not set.");

byte[] certBytes = Convert.FromBase64String(certBase64);
string certPassword = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT_PASSWORD")
    ?? throw new InvalidOperationException("PDF_SIGNING_CERT_PASSWORD environment variable is not set.");

var signature = new PdfSignature(certBytes, certPassword);
string certBase64 = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT")
    ?? throw new InvalidOperationException("PDF_SIGNING_CERT environment variable is not set.");

byte[] certBytes = Convert.FromBase64String(certBase64);
string certPassword = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT_PASSWORD")
    ?? throw new InvalidOperationException("PDF_SIGNING_CERT_PASSWORD environment variable is not set.");

var signature = new PdfSignature(certBytes, certPassword);
Imports System

Dim certBase64 As String = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT")
If certBase64 Is Nothing Then
    Throw New InvalidOperationException("PDF_SIGNING_CERT environment variable is not set.")
End If

Dim certBytes As Byte() = Convert.FromBase64String(certBase64)
Dim certPassword As String = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT_PASSWORD")
If certPassword Is Nothing Then
    Throw New InvalidOperationException("PDF_SIGNING_CERT_PASSWORD environment variable is not set.")
End If

Dim signature = New PdfSignature(certBytes, certPassword)
$vbLabelText   $csharpLabel

Dieses Vorgehen hält die Zugangsdaten von der Quellcodeverwaltung fern und vereinfacht die Rotation – man muss lediglich die Umgebungsvariable aktualisieren und den Dienst neu starten.

Wie signiert man mehrere PDFs effizient im Stapelverfahren?

Wenn Sie Dutzende oder Hunderte von Dokumenten in einem Arbeitsgang signieren müssen – beispielsweise einen ganzen Stapel Rechnungen zum Monatsende – reduziert das einmalige Laden des Zertifikats und die Wiederverwendung des Objekts PdfSignature für alle Dokumente den Aufwand:

using IronPdf;
using IronPdf.Signing;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/batch-sign", (IWebHostEnvironment env) =>
{
    string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");
    var signature = new PdfSignature(certPath, "yourPassword")
    {
        SigningReason = "Batch Invoice Approval"
    };

    string[] invoicePaths = Directory.GetFiles(
        Path.Combine(env.ContentRootPath, "Invoices"),
        "*.pdf"
    );

    string outputDir = Path.Combine(env.ContentRootPath, "Signed");
    Directory.CreateDirectory(outputDir);

    foreach (string invoicePath in invoicePaths)
    {
        var doc = PdfDocument.FromFile(invoicePath);
        doc.Sign(signature);
        string outputFile = Path.Combine(outputDir, Path.GetFileName(invoicePath));
        doc.SaveAs(outputFile);
    }

    return Results.Ok(new { SignedCount = invoicePaths.Length });
});

app.Run();
using IronPdf;
using IronPdf.Signing;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/batch-sign", (IWebHostEnvironment env) =>
{
    string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");
    var signature = new PdfSignature(certPath, "yourPassword")
    {
        SigningReason = "Batch Invoice Approval"
    };

    string[] invoicePaths = Directory.GetFiles(
        Path.Combine(env.ContentRootPath, "Invoices"),
        "*.pdf"
    );

    string outputDir = Path.Combine(env.ContentRootPath, "Signed");
    Directory.CreateDirectory(outputDir);

    foreach (string invoicePath in invoicePaths)
    {
        var doc = PdfDocument.FromFile(invoicePath);
        doc.Sign(signature);
        string outputFile = Path.Combine(outputDir, Path.GetFileName(invoicePath));
        doc.SaveAs(outputFile);
    }

    return Results.Ok(new { SignedCount = invoicePaths.Length });
});

app.Run();
Imports IronPdf
Imports IronPdf.Signing

Dim builder = WebApplication.CreateBuilder(args)
Dim app = builder.Build()

app.MapPost("/batch-sign", Function(env As IWebHostEnvironment)
    Dim certPath As String = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx")
    Dim signature As New PdfSignature(certPath, "yourPassword") With {
        .SigningReason = "Batch Invoice Approval"
    }

    Dim invoicePaths As String() = Directory.GetFiles(
        Path.Combine(env.ContentRootPath, "Invoices"),
        "*.pdf"
    )

    Dim outputDir As String = Path.Combine(env.ContentRootPath, "Signed")
    Directory.CreateDirectory(outputDir)

    For Each invoicePath As String In invoicePaths
        Dim doc = PdfDocument.FromFile(invoicePath)
        doc.Sign(signature)
        Dim outputFile As String = Path.Combine(outputDir, Path.GetFileName(invoicePath))
        doc.SaveAs(outputFile)
    Next

    Return Results.Ok(New With {.SignedCount = invoicePaths.Length})
End Function)

app.Run()
$vbLabelText   $csharpLabel

Das Erstellen des PdfSignature-Objekts außerhalb der Schleife bedeutet, dass die Zertifikatsdatei nur einmal gelesen und analysiert wird. Bei jedem Durchlauf wird eine einzelne PDF-Datei geladen, signiert und gespeichert. Bei sehr großen Dokumentenstapeln empfiehlt sich die parallele Verarbeitung von Dokumenten mithilfe von Parallel.ForEach -- Die Signaturvorgänge von IronPDF sind threadsicher, wenn jede PdfDocument Instanz in einem einzigen Thread isoliert ist.

Wie behebt man häufige Signaturfehler?

"Zertifikat nicht gefunden" oder "Ungültiges Passwort"

Überprüfen Sie den Zertifikatspfad mit File.Exists(certPath), bevor Sie ihn an PdfSignature weitergeben. Zertifikatspasswörter sind case-sensitiv und müssen exakt übereinstimmen. Bei der Entwicklung ist es üblich, ein selbstsigniertes Zertifikat mit einem einfachen Passwort zu generieren; Im Produktionsbetrieb sollte das Passwort als Geheimnis behandelt und aus einem Geheimnismanager geladen werden.

"Signatur ist ungültig" im PDF-Viewer

Eine Warnung wegen einer ungültigen Signatur in Adobe Acrobat bedeutet in der Regel eines von drei Dingen: (1) Das Zertifikat wird vom Zertifikatsspeicher des Betrachters nicht als vertrauenswürdig eingestuft, (2) das Dokument wurde nach der Signierung geändert oder (3) das Signaturzertifikat ist abgelaufen. Für den Produktiveinsatz benötigen Sie ein Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle und müssen sicherstellen, dass die Systemuhr synchronisiert ist. Für Entwicklungszwecke stellt Adobe Anweisungen zur Verfügung, wie man selbstsignierten Zertifikaten vorübergehend vertrauen kann.

"Dokument ist nicht signiert" nach dem Aufruf von Sign()

Durch den Aufruf von document.Sign(signature) wird das Dokument zur Signierung markiert, die Signatur wird jedoch erst dann endgültig, wenn Sie SaveAs aufrufen oder in einem Stream speichern. Stellen Sie sicher, dass Sie die Speichermethode nach Sign aufrufen und überprüfen Sie, ob der Ausgabedateipfad beschreibbar ist.

Für vollständige API-Details und Ressourcen zur Fehlerbehebung besuchen Sie das IronPDF Dokumentationsportal und die IronPDF Objektreferenz . Falls Sie Unterstützung benötigen, verbindet Sie die IronPDF Supportseite mit dem Entwicklerteam.

Was sind Ihre nächsten Schritte?

Das digitale Signieren von PDFs in ASP.NET Core wird unkompliziert, sobald man die drei Kernoperationen verstanden hat: das Laden eines Zertifikats, den Aufruf von Sign und das Speichern des Ergebnisses. IronPDF übernimmt die komplexen kryptografischen Berechnungen, sodass Sie sich auf die Geschäftslogik Ihrer Anwendung konzentrieren können.

Um Ihren Dokumenten-Workflow weiter auszubauen, sollten Sie sich mit diesen verwandten Themen auseinandersetzen:

Starten Sie mit einer kostenlosen IronPDF Testversion und Ihr erstes signiertes PDF ist in weniger als einer Stunde fertig. Sollten Sie Fragen haben oder auf Sonderfälle stoßen, steht Ihnen das Support-Team von Iron Software zur Verfügung, um Sie bei der Bereitstellung eines zuverlässigen und rechtskonformen Workflows zur Dokumentensignatur zu unterstützen.

Häufig gestellte Fragen

Was ist eine digitale Signatur in ASP.NET Core?

Eine digitale Signatur in ASP.NET Core ist wie ein digitales Wachssiegel, das zur Überprüfung der Authentizität und Integrität von PDF-Dokumenten verwendet wird. Sie stellt sicher, dass die Dokumente rechtsgültig sind und nicht verfälscht wurden.

Wie kann ich mit IronPDF eine digitale Signatur in ein PDF-Dokument einfügen?

Mit IronPDF können Sie einem PDF-Dokument eine digitale Signatur hinzufügen, indem Sie ein Zertifikat einfügen und es so einrichten, dass das Dokument signiert wird, wodurch es sowohl sicher als auch überprüfbar ist.

Warum sind digitale Signaturen für meine Geschäftsdokumente wichtig?

Digitale Signaturen sind von entscheidender Bedeutung, da sie die Echtheit und Unverändertheit von Dokumenten wie Verträgen oder Rechnungen bestätigen und Ihr Unternehmen so vor möglichen rechtlichen Risiken schützen.

Kann ich mit IronPDF interaktive Formularfelder in PDFs erstellen?

Ja, IronPDF ermöglicht es Ihnen, interaktive Formularfelder in PDFs zu erstellen, die die Benutzerinteraktion verbessern und die Dokumentenprozesse in ASP.NET Core-Anwendungen rationalisieren können.

Ist es möglich, meinen PDF-Dokumenten sichtbare Signaturen hinzuzufügen?

Ja, mit IronPDF können Sie Ihren PDF-Dokumenten sichtbare Signaturen hinzufügen, um den Empfängern deutlich zu machen, dass das Dokument sicher signiert und verifiziert ist.

Welche Arten von Zertifikaten können für digitale Signaturen in PDFs verwendet werden?

Sie können verschiedene Arten von Zertifikaten für digitale Signaturen in PDFs verwenden, darunter selbstsignierte Zertifikate und solche, die von einer vertrauenswürdigen Zertifizierungsstelle ausgestellt wurden, je nach dem erforderlichen Maß an Sicherheit und Vertrauen.

Wie stellt IronPDF sicher, dass ein PDF-Dokument nicht verfälscht wurde?

IronPDF stellt sicher, dass ein PDF-Dokument nicht manipuliert wurde, indem es digitale Signaturen verwendet, die die Integrität und Authentizität des Dokuments bestätigen und den Empfänger warnen, wenn nach dem Signieren Änderungen vorgenommen wurden.

Kann ich den digitalen Signiervorgang in ASP.NET Core-Anwendungen automatisieren?

Ja, Sie können den Prozess der digitalen Unterzeichnung in ASP.NET Core-Anwendungen mit IronPDF automatisieren, das die Stapelverarbeitung und die Integration in bestehende Arbeitsabläufe ermöglicht.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an