IRONSOFTWAREHOME
KORZYSTANIE Z IRONPDF

Ulepsz swoją aplikację funkcjami Visionera PDF Telerik Blazor

Curtis Chau
Curtis Chau
Updated: 5 lipca 2026

Dodanie podpisu cyfrowego do pliku PDF w ASP.NET Core chroni integralność dokumentu, potwierdza tożsamość podpisującego i sprawia, że plik jest prawnie ważny w większości jurysdykcji. Dzięki IronPDF możesz podpisywać pliki PDF po stronie serwera przy użyciu plików certyfikatów, dodawać widoczne obrazy podpisów oraz osadzać interaktywne pola formularzy podpisów — a wszystko to za pomocą zaledwie kilku wierszy kodu C#.

Zainstaluj bibliotekę z NuGet, pobierz swój .pfx certyfikat i postępuj zgodnie z poniższymi przykładami, aby zbudować workflow podpisywania dokumentów gotowy do produkcji.

PM > Install-Package IronPdf

Można go również zainstalować za pomocą menedżera pakietów NuGet w programie Visual Studio lub pobrać bezpośrednio ze strony produktu IronPDF. Bezpłatna próba, aby przetestować wszystkie funkcje podpisywania bez żadnych zobowiązań.

Czym jest podpis cyfrowy w formacie PDF i dlaczego ma znaczenie?

Podpis cyfrowy to mechanizm kryptograficzny, który wiąże tożsamość podpisującego z konkretną wersją dokumentu. Różni się on od zwykłego podpisu elektronicznego — takiego jak wpisane imię i nazwisko lub zeskanowany obraz — ponieważ wykorzystuje kryptografię klucza publicznego do tworzenia weryfikowalnej pieczęci zabezpieczonej przed manipulacją.

Kiedy ktoś podpisuje cyfrowo plik PDF, oprogramowanie do podpisywania generuje skrót zawartości dokumentu i szyfruje ten skrót za pomocą klucza prywatnego podpisującego. Powstały podpis jest osadzany w pliku PDF wraz z certyfikatem publicznym podpisującego. Każdy czytnik plików PDF obsługujący podpisy cyfrowe — w tym Adobe Acrobat Reader i przeglądarki plików PDF wbudowane w nowoczesne przeglądarki — może odszyfrować skrót za pomocą klucza publicznego i porównać go ze świeżo obliczonym skrótem dokumentu. Jeśli skróty się zgadzają, dokument jest autentyczny i niezmieniony.

Dlaczego podpisy cyfrowe mają znaczenie prawne

W większości krajów dokumenty podpisane cyfrowo mają taką samą moc prawną jak umowy papierowe podpisane odręcznie. Rozporządzenie eIDAS w Unii Europejskiej oraz ustawa ESIGN w Stanach Zjednoczonych uznają podpisy elektroniczne za prawnie wiążące, o ile spełnione są określone warunki. Podpisy cyfrowe oparte na certyfikatach spełniają najwyższy poziom tych wymagań.

Gdzie w ASP.NET Core mają zastosowanie podpisy cyfrowe

Podpisywanie po stronie serwera w aplikacji .NET Core pozwala na automatyczne podpisywanie dokumentów podczas przetwarzania — nie jest wymagane żadne oprogramowanie klienckie. Umowy, faktury, raporty zgodności i umowy o zachowaniu poufności można podpisywać w momencie ich wygenerowania, a podpisany plik można zwrócić bezpośrednio do użytkownika lub zapisać w systemie zarządzania dokumentami. IronPDF obsługuje cały proces, od renderowania HTML do PDF po podpisywanie kryptograficzne, dzięki czemu można wdrożyć przepływ pracy bez konieczności zajmowania się szczegółami specyfikacji PDF na niskim poziomie.

Jak zainstalować IronPDF w projekcie ASP.NET Core?

Najszybszym sposobem na uruchomienie środowiska podpisywania jest pakiet NuGet. Otwórz konsolę menedżera pakietów w Visual Studio i uruchom:

PM > Install-Package IronPdf

Alternatywnie, kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań, wybierz "Zarządzaj pakietami NuGet", wyszukaj IronPdf i kliknij Zainstaluj. Po instalacji dodaj następujące dyrektywy using na początku swojej klasy kontrolera lub serwisu:

using IronPdf;
using IronPdf.Signing;

IronPDF jest przeznaczony dla platform .NET 8 oraz .NET 9/10, dzięki czemu naturalnie wpisuje się w nowoczesne projekty ASP.NET Core. Szczegółowy opis pierwszej konfiguracji znajduje się w przewodniku szybkiego startu IronPDF.

Jak podpisać plik PDF za pomocą pliku certyfikatu w ASP.NET Core?

Najbardziej powszechne podejście do podpisywania używa pliku certyfikatu .pfx lub .p12. Te pliki łączą klucz prywatny i publiczny łańcuch certyfikatów w jedno chronione hasłem archiwum. Można je uzyskać od zaufanego dostawcy certyfikatów (CA) takiego jak DigiCert lub GlobalSign, lub wygenerować własny certyfikat dla celów rozwojowych i testowych.

Poniższy przykład generuje plik PDF z kodu HTML i stosuje podpis cyfrowy oparty na certyfikacie:

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();

ChromePdfRenderer konwertuje dowolny prawidłowy ciąg HTML lub URL do PDF. Konstruktor PdfSignature akceptuje ścieżkę do certyfikatu i hasło, a opcjonalne właściwości (SigningContact, SigningLocation, SigningReason) dodają metadane, które przeglądarki PDF wyświetlają w panelu podpisu. Metoda Sign osadza kryptograficzny podpis, a SaveAs zapisuje podpisany plik na dysku.

Zwracanie podpisanego pliku z pamięci

Kiedy nie chcesz zapisywać tymczasowego pliku na dysku, zapisz PDF do MemoryStream i zwróć go bezpośrednio z akcji kontrolera:

var stream = new MemoryStream();
document.SaveAs(stream);
stream.Position = 0;
return Results.File(stream, "application/pdf", "signed-contract.pdf");

Takie podejście sprawdza się w przypadku interfejsów API o dużej przepustowości, gdzie zarządzanie plikami tymczasowymi powodowałoby niepotrzebne obciążenie.

Aby uzyskać pełną dokumentację właściwości, zobacz PdfSignature dokumentację API.

Jak dodać widoczny obraz podpisu do pliku PDF?

Podpisy kryptograficzne chronią integralność dokumentu, ale są niewidoczne w wygenerowanym pliku PDF. Wiele procesów — zwłaszcza tych związanych z umowami lub pismami — wymaga również widocznej reprezentacji, takiej jak zeskanowany podpis odręczny lub pieczęć firmowa, wydrukowana na stronie.

IronPDF obsługuje to za pomocą metody LoadSignatureImageFromFile. Metoda akceptuje ścieżkę do obrazu, indeks strony i IronSoftware.Drawing.Rectangle, który definiuje pozycję i wymiary widocznego podpisu:

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();

Widoczny obraz podpisu jest umieszczany na wskazanej stronie w podanych przez Ciebie współrzędnych. Podpis kryptograficzny jest nakładany na cały dokument jednocześnie, dzięki czemu w ramach jednej operacji uzyskujesz zarówno zabezpieczenie, jak i wizualne potwierdzenie.

Jeśli obraz jest dostępny w pamięci (na przykład pobrany z bazy danych lub z przechowalni chmurowej), użyj zamiast tego LoadSignatureImageFromStream. Aby uzyskać więcej informacji na temat opcji podpisywania wizualnego, zapoznaj się z przewodnikiem dotyczącym podpisywania plików PDF.

Jak utworzyć pola formularza podpisu dla zewnętrznych sygnatariuszy?

W niektórych procesach dokument jest tworzony przez system, ale musi zostać podpisany przez stronę zewnętrzną — klienta, partnera lub organ regulacyjny. Zamiast zbierać certyfikat od tamtej strony z góry, osadzasz dedykowane pole formularza podpisu w PDF-ie i wysyłasz dokument do nich. Odbiorcy otwierają plik PDF w programie Adobe Acrobat Reader lub innej kompatybilnej przeglądarce, klikają pole podpisu i stosują własny certyfikat lub podpis elektroniczny.

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();

Parametry konstruktora SignatureFormField mapują bezpośrednio na pozycję pola na stronie. Kiedy odbiorca otworzy plik PDF, zobaczy wyraźnie zaznaczone pole, w którym powinien umieścić swój podpis. Wypełniony formularz można następnie zwrócić do systemu, gdzie można go załadować, zweryfikować osadzony podpis i zarchiwizować.

Więcej informacji na temat obsługi formularzy PDF — w tym odczytywania przesłanych danych z formularzy — można znaleźć w przewodniku po edycji formularzy PDF.

Jak programowo zweryfikować podpis cyfrowy?

Po podpisaniu i zwrocie dokumentu może zaistnieć potrzeba sprawdzenia, czy podpis jest nadal ważny i czy dokument nie został zmieniony. IronPDF udostępnia weryfikację podpisu poprzez obiekt PdfDocument:

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();

GetSignatures() zwraca listę wszystkich cyfrowych podpisów osadzonych w PDF. Każdy obiekt PdfDigitalSignature udostępnia VerifySignature(), nazwisko podpisującego, znacznik czasu podpisania i łańcuch certyfikatów. Te informacje wystarczą do stworzenia ścieżki audytu lub pulpitu nawigacyjnego do zarządzania dokumentami, który sygnalizuje wszelkie pliki PDF z uszkodzonymi lub wygasłymi podpisami.

Jak radzisz sobie z zarządzaniem certyfikatami w środowisku produkcyjnym?

Przechowywanie pliku .pfx w systemie plików działa podczas rozwoju, ale nie nadaje się do produkcji. Pliki certyfikatów zawierają klucze prywatne, a jeśli plik zostanie naruszony, zagrożone są wszystkie dokumenty podpisane tym kluczem.

Korzystanie z usługi Azure Key Vault

Azure Key Vault pozwala przechowywać i używać certyfikatów bez konieczności opuszczania skarbca przez klucz prywatny. SDK .NET dostarcza CertificateClient, który pobiera publiczne informacje certyfikatu. W przypadku rzeczywistych operacji podpisywania, w których klucz prywatny pozostaje w usłudze Key Vault, można użyć pakietu Azure.Security.KeyVault.Keys do wykonania operacji kryptograficznej po stronie serwera.

Korzystanie ze zmiennych środowiskowych i sekretów

W przypadku mniejszych projektów certyfikat należy zapisać jako ciąg znaków zakodowany w Base64 w zmiennej środowiskowej lub w menedżerze sekretów .NET Core i zdekodować go w czasie wykonywania:

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);

Ten wzorzec pozwala na wyłączenie danych uwierzytelniających z kontroli wersji i sprawia, że rotacja jest prosta — wystarczy zaktualizować zmienną środowiskową i ponownie uruchomić usługę.

Jak efektywnie podpisywać zbiorczo wiele plików PDF?

Kiedy trzeba podpisać dziesiątki lub setki dokumentów w jednym działaniu — na przykład podpisywanie całej partii faktur na koniec miesiąca — załaduj certyfikat raz i użyj ponownie obiektu PdfSignature we wszystkich dokumentach, aby zredukować obciążenie:

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();

Utworzenie obiektu PdfSignature raz poza pętlą oznacza, że plik certyfikatu jest odczytywany i parsowany tylko raz. Każda iteracja ładuje, podpisuje i zapisuje osobny plik PDF. Dla bardzo dużych partii, rozważ przetwarzanie dokumentów równolegle za pomocą Parallel.ForEach — operacje podpisywania IronPDF są bezpieczne dla wątków, gdy każda instancja PdfDocument jest izolowana do jednego wątku.

Jak rozwiązywać typowe błędy związane z podpisywaniem?

"Nie znaleziono certyfikatu" lub "Nieprawidłowe hasło"

Podwójnie sprawdź ścieżkę do certyfikatu za pomocą File.Exists(certPath) przed przekazaniem jej do PdfSignature. Hasła do certyfikatów rozróżniają wielkość liter i muszą być dokładnie zgodne. W procesie tworzenia oprogramowania często generuje się certyfikat z podpisem własnym przy użyciu prostego hasła; W środowisku produkcyjnym należy traktować hasło jako informację poufną i ładować je z menedżera sekretów.

"Podpis jest nieprawidłowy" w przeglądarce plików PDF

Ostrzeżenie o "nieprawidłowym podpisie" w programie Adobe Acrobat zazwyczaj oznacza jedną z trzech rzeczy: (1) certyfikat nie jest uznawany za zaufany przez magazyn certyfikatów przeglądarki, (2) dokument został zmodyfikowany po podpisaniu lub (3) certyfikat podpisujący wygasł. W celu wykorzystania w środowisku produkcyjnym należy uzyskać certyfikat od zaufanego urzędu certyfikacji i upewnić się, że zegar systemowy jest zsynchronizowany. W celu ułatwienia programowania firma Adobe udostępnia instrukcje dotyczące tymczasowego zaufania certyfikatom z podpisem własnym.

"Dokument nie jest podpisany" po wywołaniu Sign()

Wywołanie document.Sign(signature) oznacza dokument do podpisania, ale podpis jest finalizowany tylko gdy wywołasz SaveAs lub zapiszesz do strumienia. Upewnij się, że wywołujesz metodę zapisu po Sign, i zweryfikuj, że ścieżka pliku wyjściowego jest zapisywalna.

Aby uzyskać pełne informacje o API i zasoby dotyczące rozwiązywania problemów, odwiedź centrum dokumentacji IronPDF oraz sekcję referencji obiektów IronPDF. Jeśli potrzebujesz pomocy, strona pomocy technicznej IronPDF umożliwia kontakt z zespołem inżynierów.

Jakie są Twoje kolejne kroki?

Podpisywanie cyfrowe PDF w ASP.NET Core staje się prostsze, kiedy zrozumiesz trzy kluczowe operacje: załadowanie certyfikatu, wywołanie Sign i zapisanie wyniku. IronPDF zajmuje się skomplikowanymi operacjami kryptograficznymi, dzięki czemu możesz skupić się na logice biznesowej swojej aplikacji.

Aby kontynuować tworzenie przepływu pracy z dokumentami, zapoznaj się z poniższymi powiązanymi tematami:

Zacznij od bezpłatnej wersji próbnej IronPDF i uruchom swój pierwszy podpisany plik PDF w mniej niż godzinę. Jeśli masz pytania lub napotkasz nietypowe sytuacje, zespół wsparcia Iron Software służy pomocą w wdrożeniu niezawodnego i zgodnego z przepisami prawa procesu podpisywania dokumentów.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta