이 페이지에는 자동 번역된 텍스트가 포함될 수 있습니다.

C# 및 VB.NET에서 PDF 문서에 서명

디지털 서명은 사용자의 신원과 PDF 문서의 내용을 인증하는 데 사용됩니다. 서명을 사용하면 다음을 증명할 수 있습니다.

  • 서명된 이후로 수정되지 않았습니다.
  • 특정 사람이 디지털 서명했습니다.

C# 및 VB.NET에서 PDF에 디지털 서명 추가

PDF 문서에 서명하기 위한 .NET 라이브러리

.NET Framework 및 .NET Core 애플리케이션에서 PDF 문서에 서명하려면 Docotic.Pdf 라이브러리를 사용하세요. C# .NET PDF 라이브러리 다운로드 페이지에서 라이브러리와 무료 기간 한정 라이선스 키를 받을 수 있습니다.

Docotic.Pdf는 다양한 다이제스트 알고리즘(SHA-1, SHA-256, SHA-384, SHA-512, RIPEMD-160)과 다양한 서명 형식(adbe.pkcs7.detached 또는 ETSI.CAdES.detached)을 사용하여 디지털 서명을 만들 수 있습니다. 또한 이 라이브러리는 PDF 서명 검증도 할 수 있습니다.

C#에서 PDF에 디지털 서명 추가

PDF 문서에 서명하려면 유효한 인증 기관(CA)에서 발급한 디지털 PKCS#12 인증서(.pfx 또는 .p12 파일)가 필요합니다. 다음은 C#에서 PDF 문서에 서명하는 기본 샘플입니다:

using BitMiracle.Docotic.Pdf;

using var pdf = new PdfDocument("document_to_sign.pdf");
var options = new PdfSigningOptions("your_cert.p12", "your_cert_password")
{
    DigestAlgorithm = PdfDigestAlgorithm.Sha256,
    Format = PdfSignatureFormat.Pkcs7Detached,
    Reason = "Testing digital signatures",
    Location = "My workplace",
    ContactInfo = "support@example.com"
};

pdf.SignAndSave(options, "signed.pdf");

"your_cert.p12"와 "your_cert_password"를 직접 사용하는 .p12 또는 .pfx 인증서 파일과 비밀번호로 바꾸세요. GitHub에서 C# 및 VB.NET용 전체 PDF 문서 서명 샘플을 다운로드하여 실행해 볼 수 있습니다.

이미 서명된 문서에 서명해야 하는 경우가 있습니다. 또는 여러 사람이 양식에 순차적으로 서명해야 할 수도 있습니다. 이 역시 가능합니다. 절차는 대부분 동일합니다. 증분 방식으로 서명하고 저장하기만 하면 됩니다. 허용된 변경만 적용하는 경우 증분 업데이트는 디지털 서명을 무효화하지 않습니다.

이러한 경우를 위한 C# 및 VB.NET용 이미 서명된 PDF 문서에 서명여러 사람이 PDF 양식에 서명 샘플도 있습니다.

위 코드는 PDF 문서에 보이지 않는 서명 필드를 암시적으로 추가하고 이를 서명에 사용합니다. 이제 PDF에서 서명 필드를 추가하고 사용자 지정하는 방법을 살펴보겠습니다.

손글씨 서명 이미지가 있는 PDF 문서에 서명

디지털 서명 외에 PDF에 손글씨 서명 이미지를 추가해야 하는 경우가 많습니다. 이 샘플은 C#에서 연결된 이미지와 함께 디지털 서명을 추가하는 방법을 보여줍니다:

using var pdf = new PdfDocument("document_to_sign.pdf");
var options = new PdfSigningOptions("your_cert.p12", "your_cert_password")
{
    DigestAlgorithm = PdfDigestAlgorithm.Sha256,
    Format = PdfSignatureFormat.Pkcs7Detached,
};

PdfSignatureField field = pdf.Pages[0].AddSignatureField(20, 20, 100, 50);
options.Field = field;

PdfImage image = pdf.CreateImage("your_signature.jpg");
options.Appearance.Image = image;
options.Appearance.HideAllText();

pdf.SignAndSave(options, "signed.pdf");

이 코드는 서명 필드를 추가하고, 해당 필드를 서명 옵션과 연결하고, 필드의 모양을 사용자 지정합니다. 서명 필드에는 텍스트, 이미지 또는 둘 다를 표시할 수 있습니다. 자세한 내용은 PdfSignatureAppearanceOptions class사용자 지정 스타일을 사용하여 서명 필드에 서명 샘플을 참조하세요.

서명 필드로 PDF 양식 필드 잠금

서명 필드를 사용하면 서명 후 PDF 양식 필드를 잠글 수 있습니다. 이 샘플은 C#에서 서명 후 특정 양식 필드를 잠그는 방법을 보여줍니다:

var first = page.AddSignatureField("first", 100, 100, 200, 50);

// 첫 번째 필드가 서명되면 "some_text_field" 및
// "some_checkbox" 이름의 필드가 편집할 수 없도록 잠깁니다
first.Lock = PdfSignatureFieldLock.CreateLockFields("some_text_field", "some_checkbox");

다음 코드는 서명 후 모든 양식 필드를 잠그는 방법을 보여줍니다:

var second = page.AddSignatureField("second", 100, 200, 200, 50);

// 두 번째 필드가 서명되면 모든 필드가 편집할 수 없도록 잠깁니다
second.Lock = PdfSignatureFieldLock.CreateLockAll();

또한 특정 필드를 제외한 PDF 문서의 모든 양식 필드를 잠글 수도 있습니다. 이를 위해 PdfSignatureFieldLock.CreateLockAllExceptFields 메서드를 사용하세요.

GitHub에서 C# 및 VB.NET용 전체 잠금이 있는 서명 필드 샘플을 다운로드하여 실행해 볼 수 있습니다.

디지털 서명에 타임스탬프 포함

타임스탬프를 포함하면 디지털 서명의 보안을 추가로 강화할 수 있습니다. 이를 위해 서명 옵션 중 하나로 Timestamp Authority URL을 지정하세요. 필요한 경우 사용자 이름과 비밀번호도 제공할 수 있습니다.

서명할 때 라이브러리는 Timestamp Authority에서 타임스탬프를 가져와 서명에 포함합니다.

호환성 때문에 타임스탬프가 포함된 서명에는 SHA 다이제스트 알고리즘 중 하나를 사용하는 것이 좋습니다.

// 다음 테스트 URL을 Timestamp Authority URL로 바꾸세요
options.Timestamp.AuthorityUrl = new Uri("http://tsa.starfieldtech.com/");

// Timestamp Authority에 인증이 필요한 경우 사용자 이름과 비밀번호를 지정하세요
options.Timestamp.Username = null;
options.Timestamp.Password = null;