Przejdź z Aspose PDF na IronPDF
"Podpisywanie" oznacza trzy różne rzeczy w IronPDF, i nie są one wymienne: niezmienne dowody podpisu cyfrowego popartego certyfikatem, wizualny stempel z odręcznym obrazem oraz interaktywne pole do późniejszego podpisania przez użytkownika. Ich wlasciwosci bezpieczenstwa roznia sie, wiec przypadki uzycia sa rozdzielone zgodnie z tym podzialem. Kryptograficznym rdzeniem jest klasa PdfSignature z X509Certificate2 zaladowanym z pliku .pfx lub .p12, stosowana za pomoca pdf.Sign(...). To wiąże tożsamość z treścią, więc każde późniejsze edytowanie łamie podpis.
Umowy i kontrakty z oznakami ingerencji
Jedna z pierwszych, po którą zespoły sięgają. Podpis certyfikatu dowodzi, że dokument jest autentyczny i niezmieniony, i pozwala na osadzenie ścieżki audytu (powód, lokalizacja, kontakt, data) i zaufanego znacznika czasu:
using IronPdf;
using IronPdf.Signing;
using System;
var pdf = PdfDocument.FromFile("contract.pdf");
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningReason = "Contractual Agreement",
SigningLocation = "Chicago, USA",
SignatureDate = DateTime.Now,
TimeStampUrl = new Uri("http://timestamp.digicert.com"),
TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
};
pdf.Sign(signature);
pdf.SaveAs("contract-signed.pdf");
using IronPdf;
using IronPdf.Signing;
using System;
var pdf = PdfDocument.FromFile("contract.pdf");
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningReason = "Contractual Agreement",
SigningLocation = "Chicago, USA",
SignatureDate = DateTime.Now,
TimeStampUrl = new Uri("http://timestamp.digicert.com"),
TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
};
pdf.Sign(signature);
pdf.SaveAs("contract-signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports System
Dim pdf = PdfDocument.FromFile("contract.pdf")
Dim signature = New PdfSignature("certificate.pfx", "password") With {
.SigningReason = "Contractual Agreement",
.SigningLocation = "Chicago, USA",
.SignatureDate = DateTime.Now,
.TimeStampUrl = New Uri("http://timestamp.digicert.com"),
.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
}
pdf.Sign(signature)
pdf.SaveAs("contract-signed.pdf")
Znacznik czasu z zaufanej instytucji zapewnia kryptograficzny dowód kiedy dokument został podpisany, niezależnie od lokalnego zegara - co ma znaczenie dla składania dokumentów i regulowanych zgłoszeń.
Zamknięcie dokumentów po podpisaniu
Ustawienie SignaturePermissions kontroluje, co jest dozwolone po tym: NoChangesAllowed blokuje dokument, FormFillingAllowed zezwala tylko na wprowadzanie danych w polach, a AnnotationsAndFormFillingAllowed zezwala rowniez na dodawanie notatek. Każde niedozwolone działanie unieważnia podpis, co pasuje do wydawanych certyfikatów, zatwierdzonych zasad i finalnych oświadczeń.
Przepływy pracy zatwierdzeń wielostronnych
Ponieważ PDFy wspierają zapisywanie inkrementalne, podpis dotyczy konkretnej rewizji. Każdy zatwierdzający podpisuje swoje własne, a historia zapisuje, kto podpisał co, kiedy i co się zmieniło. To obejmuje współpodpisywanie i sekwencyjne zatwierdzanie.
Weryfikacja i bramki audytowe
Pipeline może odrzucić każdy dokument, który się nie weryfikuje, a następnie cofnąć lub usunąć podpisy:
var pdf = PdfDocument.FromFile("signed-report.pdf");
bool valid = pdf.VerifySignatures();
if (!valid)
{
pdf.RemoveSignatures();
pdf.SaveAs("report-unsigned.pdf");
}
var pdf = PdfDocument.FromFile("signed-report.pdf");
bool valid = pdf.VerifySignatures();
if (!valid)
{
pdf.RemoveSignatures();
pdf.SaveAs("report-unsigned.pdf");
}
Dim pdf = PdfDocument.FromFile("signed-report.pdf")
Dim valid As Boolean = pdf.VerifySignatures()
If Not valid Then
pdf.RemoveSignatures()
pdf.SaveAs("report-unsigned.pdf")
End If
Widoczna aprobata bez kryptografii
Gdy potrzebujesz tylko wyglądu podpisu, nie prawnego wyłączenia odpowiedzialności, odciśnij zeskanowany odręczny obraz za pomocą funkcji stempa lub znaku wodnego. Dobrze do zatwierdzeń wewnętrznych, o ile jesteś jasny, czym jest.
Stempel lub certyfikat i dwa punkty zaskoczenia
Nigdy nie pozwalaj, by obraz stempla zastąpił certyfikat podpisu. Stempel to piksele na stronie: da się go skopiować, niezweryfikowany, brak gwarancji, że dokument jest niezmieniony. Certyfikat podpisu jest odporny na manipulacje i kryptograficznie wiąże tożsamość z treścią. Użyj stempla dla wyglądu, certyfikatu do dowodu.
Dwie rzeczy zaskoczą ludzi. Zaladowanie certyfikatu za pomoca X509KeyStorageFlags.Exportable jest konieczne, inaczej klucz prywatny nie moze byc uzyty i podpisanie sie nie powiedzie. A jesli przegladarka pokazuje ostrzezenie zamiast zielonego znacznika, certyfikat nie znajduje sie w zaufanym magazynie tej przegladarki; podpis jest nadal wazny, ale zaufanie musi byc ustalone osobno.
Często Zadawane Pytania
Jakie są trzy rodzaje podpisywania PDF w IronPDF?
IronPDF wspiera: (1) kryptograficzne podpisy cyfrowe wspierane certyfikatem X.509, które wiążą tożsamość z treścią i unieważniają się po manipulacji; (2) wizualne pieczątki obrazkowe, które umieszczają obraz podpisu odręcznego na stronie bez dowodu kryptograficznego; oraz (3) interaktywne pola podpisu, gdzie użytkownik podpisuje później w przeglądarce PDF.
Jak dodać podpis cyfrowy z dowodem manipulacji do PDF w C#?
Załaduj certyfikat X.509 z pliku .pfx lub .p12 do obiektu PdfSignature, ustaw powód podpisu, lokalizację, datę i opcjonalnie zaufany URL znacznika czasowego, a następnie wywołaj pdf.Sign(signature) i zapisz.
Jaka jest różnica między cyfrowym podpisem PDF a wizualną pieczątką?
Podpis cyfrowy kryptograficznie wiąże tożsamość certyfikatu z treścią dokumentu — każda późniejsza edycja go łamie. Wizualna pieczątka to tylko obraz na stronie: można ją kopiować, nie jest weryfikowalna i nie daje gwarancji, że dokument nie został zmieniony. Używaj pieczątek dla wyglądu; certyfikatów dla dowodu prawnego.
Dlaczego IronPDF nie może podpisać z komunikatem 'klucz prywatny niedostępny'?
Załaduj certyfikat X.509 z flagą X509KeyStorageFlags.Exportable. Bez niej klucz prywatny nie może być dostępny do podpisania.
Jak zweryfikować i usunąć podpisy z PDF w IronPDF?
Wywołaj pdf.VerifySignatures(), aby sprawdzić, czy wszystkie podpisy są ważne. Jeśli wynik jest fałszywy, wywołaj pdf.RemoveSignatures(), aby je usunąć przed ponownym przetwarzaniem lub ponownym podpisaniem.

