C# 코드로 PDF 내 디지털 서명을 검증하거나 가져오는 방법
PDF를 디지털 서명으로 보호하는 것은 문서의 완전성과 부인 방지를 보장하는 데 매우 중요합니다. 이러한 배경에서 디지털 서명을 검증할 수 있는 능력 또한 중요합니다. 유효한 서명은 문서가 서명 이후 변경되지 않았으며, 선언된 출처에서 온 것임을 의미합니다.
디지털 서명을 다룰 때, 서명 인증서를 가져와 발급자 정보, 주체 정보, 일련 번호 및 유효 기간 등을 확인하고자 할 때도 있습니다. 본문에서는 C#에서 Spire.PDF for .NET을 사용하여 PDF 내 디지털 서명을 검증하거나 가져오는 방법을 소개합니다.
Spire.PDF for .NET 설치
먼저, Spire.PDF for .NET 패키지에 포함된 DLL 파일을 .NET 프로젝트의 참조로 추가해야 합니다. 이러한 DLL 파일은 이 링크를 통해 다운로드하거나, NuGet을 통해 설치할 수 있습니다.
PM> Install-Package Spire.DocC#에서 PDF 내 디지털 서명 검증하기
Spire.PDF for .NET은 PdfSignature.VerifySignature() 메서드를 제공하여 PDF 문서 내 디지털 서명의 유효성을 직접 확인할 수 있습니다.
예제 코드는 다음과 같습니다:
using Spire.Pdf;
using Spire.Pdf.Security;
using Spire.Pdf.Widget;
namespace GetSignatureCertificate
{
class Program
{
static void Main(string[] args)
{
//PdfDocument 객체 생성
PdfDocument pdf = new PdfDocument();
//PDF 파일 로드
pdf.LoadFromFile("PDFSignature.pdf");
//PDF 파일 내 폼 필드 컬렉션 가져오기
PdfFormWidget pdfFormWidget = (PdfFormWidget)pdf.Form;
PdfFormFieldWidgetCollection pdfFormFieldWidgetCollection = pdfFormWidget.FieldsWidget;
//모든 필드 순회
for (int i = 0; i < pdfFormFieldWidgetCollection.Count; i++)
{
//获取签名字段
if (pdfFormFieldWidgetCollection[i] is PdfSignatureFieldWidget)
{
PdfSignatureFieldWidget signatureFieldWidget = (PdfSignatureFieldWidget)pdfFormFieldWidgetCollection[i];
//서명 필드 가져오기
PdfSignature signature = signatureFieldWidget.Signature;
//서명 가져오기
bool valid = signature.VerifySignature();
if (valid)
{
Console.WriteLine("Valid signatures");
}
else
{
Console.WriteLine("Invalid signatures");
}
}
}
}
}
}C#에서 서명된 PDF가 변경되었는지 확인하기
PDF 문서가 서명 후 변경되었는지 검증하려면 PdfSignature.VerifyDocModified() 메서드를 사용할 수 있습니다. 결과가 문서가 변경되었음을 나타내면, 서명이 무효화되고 문서의 완전성이 손상되었음을 의미합니다.
예제 코드는 다음과 같습니다:
using Spire.Pdf;
using Spire.Pdf.Security;
using Spire.Pdf.Widget;
namespace GetSignatureCertificate
{
class Program
{
static void Main(string[] args)
{
//PdfDocument 객체 생성
PdfDocument pdf = new PdfDocument();
//PDF 문서 로드
pdf.LoadFromFile("PDFSignature.pdf");
//PDF 파일 내 폼 필드 컬렉션 가져오기
PdfFormWidget pdfFormWidget = (PdfFormWidget)pdf.Form;
PdfFormFieldWidgetCollection pdfFormFieldWidgetCollection = pdfFormWidget.FieldsWidget;
for (int i = 0; i < pdfFormFieldWidgetCollection.Count; i++)
{
//서명 필드 가져오기
if (pdfFormFieldWidgetCollection[i] is PdfSignatureFieldWidget)
{
PdfSignatureFieldWidget signatureFieldWidget = (PdfSignatureFieldWidget)pdfFormFieldWidgetCollection[i];
//서명 가져오기
PdfSignature signature = signatureFieldWidget.Signature;
//서명 후 문서가 변경되었는지 확인
bool modified = signature.VerifyDocModified();
if (modified)
{
Console.WriteLine("문서가 변경되었습니다.");
}
else
{
Console.WriteLine("문서가 변경되지 않았습니다.");
}
}
}
}
}
}C#에서 PDF 내 디지털 서명 인증서 가져오기
PDF 파일에 서명하는 데 사용되는 디지털 인증서에는 일반적으로 발급자의 신원을 확인하기 위한 다양한 정보가 포함되어 있습니다. Spire.PDF for .NET을 사용하면 PdfSignatureFieldWidget.Signature.Certificate 속성을 통해 PDF 파일 내 인증서를 가져올 수 있습니다.
예제 코드는 다음과 같습니다:
using Spire.Pdf;
using Spire.Pdf.Widget;
namespace GetSignatureCertificate
{
class Program
{
static void Main(string[] args)
{
//PdfDocument 객체 생성
PdfDocument pdf = new PdfDocument();
//PDF 파일 로드
pdf.LoadFromFile("PDFSignature.pdf");
//PDF 파일 내 폼 필드 컬렉션 가져오기
PdfFormWidget pdfFormWidget = (PdfFormWidget)pdf.Form;
PdfFormFieldWidgetCollection pdfFormFieldWidgetCollection = pdfFormWidget.FieldsWidget;
//모든 필드 순회
for (int i = 0; i < pdfFormFieldWidgetCollection.Count; i++)
{
//서명 필드 가져오기
if (pdfFormFieldWidgetCollection[i] is PdfSignatureFieldWidget)
{
PdfSignatureFieldWidget signatureFieldWidget = (PdfSignatureFieldWidget)pdfFormFieldWidgetCollection[i];
//서명 인증서 가져오기
string certificateInfo = signatureFieldWidget.Signature.Certificate.ToString();
//인증서 형식 가져오기
string format = signatureFieldWidget.Signature.Certificate.GetFormat();
//인증서 정보 출력
Console.WriteLine(certificateInfo + "\n" + "[CertificateFormat]\n " + format);
}
}
Console.ReadKey();
}
}
}