[java] iText 라이브러리를 이용한 디지털 서명 기능

디지털 서명은 전자 문서의 무결성과 인증을 보장하기 위해 사용됩니다. iText는 PDF 문서를 생성하고 편집하기 위한 자바 라이브러리로, 디지털 서명도 지원합니다. 이번 블로그 게시물에서는 iText 라이브러리를 사용하여 PDF 문서에 디지털 서명을 추가하는 방법에 대해 알아보겠습니다.

필수 라이브러리 추가

먼저 iText를 사용하기 위해 필요한 라이브러리를 프로젝트에 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음 의존성을 추가합니다:

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext7-core</artifactId>
    <version>7.1.15</version>
</dependency>
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext7-sign</artifactId>
    <version>7.1.15</version>
</dependency>

Gradle을 사용하는 경우, build.gradle 파일에 다음 의존성을 추가합니다:

implementation 'com.itextpdf:itext7-core:7.1.15'
implementation 'com.itextpdf:itext7-sign:7.1.15'

디지털 서명 추가

이제 PDF 문서에 디지털 서명을 추가해보겠습니다. 아래는 간단한 예제 코드입니다.

import com.itextpdf.signatures.*;

public class DigitalSignatureExample {
    public void signPdf(String src, String dest, PrivateKey pk, Certificate[] chain) throws GeneralSecurityException, IOException {
        PdfReader reader = new PdfReader(src);
        PdfSigner signer = new PdfSigner(reader, new FileOutputStream(dest), new StampingProperties().useAppendMode());

        // 서명 설정
        PdfSignatureAppearance appearance = signer.getSignatureAppearance();
        appearance.setReason("이 문서는 디지털로 서명되었습니다.");
        appearance.setLocation("서명 위치");
        appearance.setPageNumber(1);

        // 서명 생성
        IExternalDigest digest = new BouncyCastleDigest();
        IExternalPKCS7 externalPks7 = new ExternalBlankSignatureContainer(PdfName.Adobe_PPKLite, PdfName.Adbe_pkcs7_detached);
        MakeSignature.signDetached(appearance, digest, externalPks7, chain, null, null, null, 0, MakeSignature.CryptoStandard.CMS);
    }
}

위 코드에서는 DigitalSignatureExample 클래스에 signPdf 메서드를 사용하여 PDF 문서에 디지털 서명을 추가합니다. PrivateKeyCertificate 배열을 사용하여 서명에 필요한 키 및 인증서를 제공합니다.

결론

이 방법을 사용하여 iText 라이브러리를 활용해 간단하게 PDF 문서에 디지털 서명을 추가할 수 있습니다. 디지털 서명은 문서의 무결성과 신원에 대한 확실한 증명을 제공하여 전자 문서의 신뢰성을 높이는 데 도움이 됩니다.

참조: