IRONSOFTWAREHOME

Java에서 PDF에 디지털 서명하는 방법

Curtis Chau
Curtis Chau
Updated: 2026년 6월 16일

IronPDF를 사용하여 Java에서 PDF에 디지털 서명하는 것은 문서 진위성을 검증하고 무단 변경을 감지하는 암호화 서명을 적용할 수 있게 해줍니다. IronPDF는 모든 PDF에 PFX 인증서 기반 서명을 첨부하고, 서명 이미지를 설정하며, PdfCertificationLevel로 PDF 인증 레벨을 제어하고, TSA 서버에 연결하여 장기 서명 유효성을 보장하는 PdfSignature를 지원합니다.

빠른 시작: Java에서 PDF에 디지털 서명하기
  1. IronPDF for Java를 Maven 또는 Gradle을 통해 설치하세요
  2. License.setLicenseKey()로 라이센스 키를 설정하세요.
  3. PdfDocument.fromFile()로 PDF를 로드하세요.
  4. PFX 인증서 파일과 비밀번호로 PdfSignature를 생성하세요.
  5. signDigitalSignature()로 서명을 적용하세요.
  6. saveAs()로 서명된 PDF를 저장하세요.
  1. 1Install IronPDF with Maven Central Repository

    > mvn install

  2. 2다음 코드 조각을 복사하여 실행하세요.

    //:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/quickstart.java
    import java.io.IOException;
    import java.nio.file.Path;
    import com.ironsoftware.ironpdf.License;
    import com.ironsoftware.ironpdf.PdfDocument;
    import com.ironsoftware.ironpdf.signature.PdfSignature;
    
    public class Main {
        public static void main(String[] args) throws IOException {
            // Set the IronPDF license key
            License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
    
            // Load an existing PDF document
            PdfDocument pdf = PdfDocument.fromFile(Path.of("document.pdf"));
    
            // Create a PdfSignature using a PFX certificate file and its password
            PdfSignature signature = new PdfSignature("certificate.pfx", "password123");
    
            // Set signature metadata for audit trails
            signature.setSigningContact("John Smith");
            signature.setSigningLocation("New York");
            signature.setSigningReason("Document Approval");
    
            // Apply the digital signature to the PDF
            pdf.signDigitalSignature(signature);
    
            // Save the signed PDF to a new file
            pdf.saveAs(Path.of("signed.pdf"));
        }
    }
    Java
  3. 3실제 운영 환경에서 테스트할 수 있도록 배포하세요.

    무료 체험판으로 오늘 프로젝트에서 IronPDF 사용 시작하기
    arrow pointer

디지털 서명은 PDF 문서에 개인 키와 인증서에 연계된 암호화 신원을 부여합니다. 수신자가 Adobe Acrobat 또는 호환 뷰어에서 서명된 PDF를 열 때, 애플리케이션은 인증서 체인이 신뢰할 수 있는 권한으로 되돌아가고, 서명 이후 문서 내용이 변경되지 않았음을 검증합니다. 이러한 인증 및 무결성의 결합으로 인해 디지털 서명은 계약서, 청구서, 규제 제출물 및 무단 변조 증거가 중요한 모든 문서에 필수적입니다.

PDF 서명은 승인 서명과 작성자(인증) 서명 두 가지 범주로 나뉩니다. 승인 서명은 한 시점에 한 서명자의 승인을 기록합니다; 여러 당사자가 순서대로 승인 서명을 추가할 수 있으며, 이전 서명을 무효화하지 않습니다. certify()로 적용된 인증 서명은 문서를 PdfCertificationLevel에 따라 잠그고 서명자를 문서 저자로 표시합니다. 인증 서명은 문서의 첫 번째 서명이 되어야 하며, 이후 서명자가 허용할 수 있는 변경 사항을 제어합니다.

IronPDF는 PdfSignature와 PdfDocument 주위에 구축된 일관된 API를 통해 두 가지 유형의 서명을 처리합니다. 초기 설정, 종속성 구성 및 라이선스 키 설명서는 시작 가이드 개요를 참조하세요.

시작하기 전에 무엇이 필요합니까?

IronPDF를 사용하여 PDF에 서명하기 전에 다음 필수 조건을 확인하세요:

  • Java 8 이상: IronPDF는 버전 8 이상의 JDK가 필요합니다.
  • IronPDF for Java: 종속성을 빌드 파일에 추가합니다. 최신 버전은 Maven Central에서 확인하세요.
  • 유효한 라이센스 키: License.setLicenseKey()로 애플리케이션 시작 시 키를 설정하세요. 설정 세부정보는 라이선스 키 설명서를 참조하세요.
  • PFX 또는 P12 인증서 파일: 이는 PKCS#12 형식의 개인 키와 공개 인증서를 포함하는 비밀번호로 보호된 아카이브입니다. 자체 서명 인증서는 개발 및 테스트에 적합합니다; 외부 수신자가 신뢰해야 하는 프로덕션 문서의 경우 DigiCert, Comodo, GlobalSign과 같은 인정된 인증 기관(CA)이 발급한 인증서를 사용하세요.

전체 종속성 설정 및 프로젝트 구성은 시작 가이드 개요를 참조하세요.

PDF에 디지털 서명을 적용하려면 어떻게 하나요?

PdfSignature 생성자는 PFX 인증서의 파일 경로와 비밀번호를 받습니다. 생성된 후 세 가지 setter 메서드를 통해 선택적 메타데이터를 첨부할 수 있습니다:

  • setSigningContact(String): 서명자의 이름이나 이메일
  • setSigningLocation(String): 서명자의 물리적 또는 조직적 위치
  • setSigningReason(String): 문서가 서명되는 이유에 대한 짧은 설명

이 필드는 PDF 뷰어의 서명 속성 패널에 나타나며, 규정 준수를 위한 유용한 감사 기록을 작성합니다. 암호화 서명을 내장하기 위해 로드된 PdfDocument에 signDigitalSignature(PdfSignature)를 호출한 후 saveAs()로 결과를 저장하세요.

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/apply-signature.java
import java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.signature.PdfSignature;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the IronPDF license key
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load the PDF to sign
        PdfDocument pdf = PdfDocument.fromFile(Path.of("contract.pdf"));

        // Construct the PdfSignature with the certificate path and password
        PdfSignature signature = new PdfSignature("certificate.pfx", "password123");

        // Set metadata that will appear in the signature properties panel
        signature.setSigningContact("Jane Doe");
        signature.setSigningLocation("Austin, TX");
        signature.setSigningReason("Contract Approval");

        // Embed the digital signature in the PDF
        pdf.signDigitalSignature(signature);

        // Save the signed document
        pdf.saveAs(Path.of("contract-signed.pdf"));
    }
}
Java

signDigitalSignature()가 완료되면 PDF는 문서 내용을 PFX 파일의 개인 키로 서명된 암호화 해시를 포함합니다. 이 시점 이후 파일에 수정이 가해지면 서명이 무효화됩니다.

PDF에 가시적 서명 이미지를 추가하려면 어떻게 하나요?

가시적 서명 이미지는 서명 필드의 위치에서 PDF 페이지에 그래픽 표현을 직접 배치합니다. 이는 스캔된 손글씨 서명, 회사 스탬프, 로고를 표시하여, PDF 리더의 서명 패널로 검사할 때뿐만 아니라 인쇄하거나 볼 때 문서에 서명이 있는 것처럼 보일 수 있도록 자주 사용됩니다.

보이는 이미지를 추가하려면 이미지 파일을 FileInputStream로 열고, PdfSignature.setSignatureImage(InputStream)에 전달한 후 signDigitalSignature()를 호출하세요. 이미지는 페이지의 서명 필드 내에 임베드됩니다.

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/visible-signature-image.java
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.signature.PdfSignature;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the IronPDF license key
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load the PDF document to sign
        PdfDocument pdf = PdfDocument.fromFile(Path.of("agreement.pdf"));

        // Build the PdfSignature from a PFX certificate
        PdfSignature signature = new PdfSignature("certificate.pfx", "password123");

        // Set signing metadata
        signature.setSigningContact("Alice Johnson");
        signature.setSigningLocation("Chicago, IL");
        signature.setSigningReason("Agreement Authorization");

        // Open the signature image file and attach it to the signature
        FileInputStream imageStream = new FileInputStream("signature.png");
        signature.setSignatureImage(imageStream);

        // Apply the digital signature with the visible image to the PDF
        pdf.signDigitalSignature(signature);

        // Save the signed PDF with the visible signature image embedded
        pdf.saveAs(Path.of("agreement-signed.pdf"));
    }
}
Java

서명 이미지는 암호화 보호를 대체하지 않습니다; 그래픽 스탬프와 기본 인증서 모두 서명된 출력의 일부로 남아있습니다. PNG 및 JPEG 형식이 서명 이미지에 대해 지원됩니다.

특정 권한 수준으로 PDF를 인증하려면 어떻게 하나요?

PDF를 인증하는 것은 승인 서명을 추가하는 것과 다릅니다. pdf.certify(PdfSignature, PdfCertificationLevel)를 호출하면 문서 작성자로서 서명하고, 이후 사용자가 허용할 변경 유형을 지정합니다. 인증된 PDF는 Adobe Acrobat에서 파란 리본 또는 유사한 신뢰 표시기를 표시하여 수신자에게 문서가 확인된 출처에서 전달되었음을 알립니다.

IronPDF는 PdfCertificationLevel 열거형을 통해 세 가지 인증 레벨을 제공합니다:

  • PdfCertificationLevel.NO_CHANGES_ALLOWED: 문서가 인증 후 완전히 잠깁니다. 더 이상의 수정을 허용하지 않습니다.
  • PdfCertificationLevel.FORM_FILLING: 수신자는 양식 필드를 채울 수 있지만, 주석, 주해 또는 기타 변경은 추가할 수 없습니다.
  • PdfCertificationLevel.FORM_FILLING_AND_ANNOTATIONS: 수신자는 양식 필드를 채우고 주 주해를 추가할 수 있지만, 구조적 변경은 여전히 금지됩니다.

인증 서명은 문서의 첫 번째 서명이 되어야 하므로, 다른 당사자의 승인을 받기 전에 certify()를 호출하세요.

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/certify-pdf.java
import java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.signature.PdfCertificationLevel;
import com.ironsoftware.ironpdf.signature.PdfSignature;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the IronPDF license key
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load the PDF that will be certified
        PdfDocument pdf = PdfDocument.fromFile(Path.of("report.pdf"));

        // Create the PdfSignature from the author's certificate
        PdfSignature signature = new PdfSignature("author-certificate.pfx", "password123");

        // Set author metadata for the certification signature
        signature.setSigningContact("Legal Department");
        signature.setSigningLocation("San Francisco, CA");
        signature.setSigningReason("Official Publication");

        // Certify the document with NO_CHANGES_ALLOWED to lock it completely
        // Use FORM_FILLING to allow form field input after certification
        // Use FORM_FILLING_AND_ANNOTATIONS to also permit annotations
        pdf.certify(signature, PdfCertificationLevel.NO_CHANGES_ALLOWED);

        // Save the certified PDF
        pdf.saveAs(Path.of("report-certified.pdf"));
    }
}
Java

NO_CHANGES_ALLOWED로 인증된 후, PDF를 수정하려는 모든 시도는 인증 서명을 깨뜨리며 PDF 뷰어는 경고를 표시할 것입니다. 인증된 문서를 하류 수신자가 작성하거나 주석을 추가해야 할 때, 작성자의 인증을 무효화하지 않으려면 FORM_FILLING 또는 FORM_FILLING_AND_ANNOTATIONS를 선택하세요.

디지털 서명에 타임스탬프를 추가하려면 어떻게 하나요?

타임스탬프 권한 기관(TSA) 서버는 PDF의 서명 옆에 포함되는 암호화 서명된 시간 토큰을 제공합니다. 이 타임스탬프는 서명이 적용된 시점을 서명자의 로컬 시계와 독립적으로 증명합니다. 장기 유효성은 타임스탬프에 의존합니다: 서명 인증서가 만료된 후에도 신뢰할 수 있는 타임스탬프를 사용하면 검증자가 서명이 인증서가 여전히 유효할 때 만들어졌음을 확인할 수 있습니다.

타임스탬프를 활성화하려면 서명 전에 PdfSignature 객체에 두 가지 속성을 설정하세요.

  • setTimestampHashAlgorithm(PdfHashAlgorithm): 타임스탬프 토큰을 계산할 때 사용할 해싱 알고리즘을 지정합니다. PdfHashAlgorithm.SHA256는 표준 선택입니다.
  • setTimestampUrl(String): 타임스탬프 토큰을 발급할 TSA 서버의 HTTP 또는 HTTPS 엔드포인트.

여러 TSA 서버가 테스트 및 저량 생산 사용을 위해 무료로 제공됩니다. https://freetsa.org/tsr와 http://timestamp.digicert.com는 일반적으로 사용되는 두 엔드포인트입니다.

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/timestamp-signature.java
import java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.signature.PdfHashAlgorithm;
import com.ironsoftware.ironpdf.signature.PdfSignature;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the IronPDF license key
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load the PDF to sign with a timestamp
        PdfDocument pdf = PdfDocument.fromFile(Path.of("invoice.pdf"));

        // Construct the PdfSignature from the certificate file
        PdfSignature signature = new PdfSignature("certificate.pfx", "password123");

        // Set signature metadata
        signature.setSigningContact("Finance Team");
        signature.setSigningLocation("Seattle, WA");
        signature.setSigningReason("Invoice Authorization");

        // Configure the timestamp: set the hash algorithm and TSA endpoint
        signature.setTimestampHashAlgorithm(PdfHashAlgorithm.SHA256);
        signature.setTimestampUrl("https://freetsa.org/tsr");

        // Apply the digital signature; IronPDF will contact the TSA to obtain
        // and embed a timestamp token alongside the cryptographic signature
        pdf.signDigitalSignature(signature);

        // Save the timestamped, signed PDF
        pdf.saveAs(Path.of("invoice-signed-timestamped.pdf"));
    }
}
Java

TSA가 서명 시점에 접근할 수 없는 경우, IronPDF는 예외를 던집니다; 프로덕션에 배포하기 전에 네트워크 액세스와 TSA 엔드포인트 URL을 확인하세요. 고량 생산 워크플로를 처리할 때, 가동 시간 및 처리량 보장을 확보하기 위해 상업적인 TSA 구독을 고려하세요.

Java에서 PDF를 디지털 서명하는 다음 단계는 무엇인가요?

IronPDF의 PdfSignature 클래스는 PDF 서명 요구 사항의 전체 범위를 다룹니다: 인증 메타데이터와 함께 승인 서명, 보이는 그래픽 스탬프, 액세스 제어 수준과 함께하는 PDF 인증, TSA로 뒷받침된 타임스탬프로 장기적인 유효성을 보장합니다. 서명 외의 PDF 워크플로를 확장하려면 다음의 관련 리소스를 탐색하세요:

무료 체험을 시작하세요 Java PDF 워크플로에 디지털 서명을 추가하세요. 프로덕션 사용을 위한 라이선스를 구매하려면, 라이선스 옵션 보기.

자주 묻는 질문

Java에서 IronPDF로 PDF를 디지털 서명하는 방법은?

PDF를 PdfDocument.fromFile()로 불러온 뒤, PFX 인증서 파일 경로와 비밀번호를 사용하여 PdfSignature를 생성합니다. setSigningContact(), setSigningLocation(), setSigningReason()로 메타데이터를 옵션으로 설정한 후, pdf.signDigitalSignature(signature)를 호출하고 pdf.saveAs()로 저장합니다.

IronPDF에서 signDigitalSignature()와 certify()의 차이점은 무엇인가요?

signDigitalSignature()는 한 명의 서명자의 승인을 기록하는 승인 서명을 추가합니다. 여러 승인 서명을 순차적으로 추가할 수 있습니다. certify()는 문서의 첫 번째로 있어야 하는 저자 서명을 추가하며, 후속 서명자가 할 수 있는 변경을 제어하는 PdfCertificationLevel을 설정합니다.

Java에서 서명된 PDF에 시각적 서명 이미지를 추가하는 방법은?

FileInputStream으로 이미지 파일을 열고 signature.setSignatureImage(imageStream)에 전달한 다음 signDigitalSignature()를 호출합니다. 이미지는 페이지에 있는 암호화 서명과 함께 서명 필드에 포함됩니다.

IronPDF는 어떤 PDF 인증 수준을 지원하나요?

IronPDF는 PdfCertificationLevel 열거형을 통해 세 가지 수준을 지원합니다: NO_CHANGES_ALLOWED는 문서를 완전히 잠그고, FORM_FILLING은 폼 필드 입력만 허용하며, FORM_FILLING_AND_ANNOTATIONS는 구조적 수정 없이 폼 필드 및 주석을 허용합니다.

Java에서 디지털 서명에 타임스탬프를 추가하는 방법은?

signDigitalSignature()를 호출하기 전에 signature.setTimestampHashAlgorithm(PdfHashAlgorithm.SHA256)과 signature.setTimestampUrl("https://freetsa.org/tsr")을 PdfSignature에 설정하세요. IronPDF는 TSA 서버에 접속하여 서명된 PDF에 타임스탬프 토큰을 포함시킵니다.

PDF 서명에 필요한 인증서 파일 형식은 무엇인가요?

IronPDF는 비공개 키와 공개 인증서를 포함하는 PKCS#12 아카이브, PFX 또는 P12 인증서 파일이 필요합니다. 개발 시에는 자체 서명한 인증서를 사용할 수 있으며, 상용 환경에서는 DigiCert나 GlobalSign과 같은 신뢰할 수 있는 인증 기관에서 인증서를 얻어야 합니다.

Java에서 IronPDF를 사용하여 PDF를 디지털 서명하기 위한 사전 조건은 무엇인가요?

Java 8 이상, Maven 또는 Gradle을 통해 추가된 IronPDF 의존성, License.setLicenseKey()로 설정된 유효한 라이선스 키, 비밀번호가 있는 PFX 또는 P12 인증서 파일이 필요합니다.

How do I certify a document with no changes allowed using IronPDF?

To certify a document with no changes allowed, construct a PdfSignature, set any required metadata, and call pdf.certify() with the PdfCertificationLevel.NO_CHANGES_ALLOWED parameter before applying any approval signatures.

What are the benefits of using digital signatures on PDFs with IronPDF?

Digital signatures ensure the authenticity and integrity of a document by creating a cryptographic identity tied to a private key. They are ideal for contracts, invoices, and legal documents, where tamper evidence and verification are crucial.

What next steps are recommended after setting up digital signatures with IronPDF?

After setting up digital signatures, consider exploring related IronPDF functionalities, such as creating and filling PDF forms, adding annotations, and merging PDFs to enhance your Java PDF workflow.

Curtis Chau
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

...
더 읽어보기

시작할 준비 되셨나요?

버전:2026.6방금 출시

지금 바로 30일 무료 체험판 키를 받으세요.
신용카드나 계정 생성은 필요하지 않습니다.
PDF용 Java Maven 라이브러리
Maven을 사용하여 설치하세요

버전: 2026.6

<dependency>
   <groupId>com.ironsoftware</groupId>
   <artifactId>ironpdf</artifactId>
   <version>2026.6.1</version>
</dependency>
https://central.sonatype.com/artifact/com.ironsoftware/ironpdf/2026.6.1
or
자바 PDF JAR
JAR 파일 다운로드

버전: 2026.6

프로젝트에 수동으로 설치하세요

Key in blue circle

무료 30일 체험 키를 즉시 받으세요.

Your trial license will be sent to your email address

제한 없음. 100% 무제한 이용. 신용카드 불필요.

OR
bullet_checked신용카드나 계정 생성은 필요하지 않습니다.제한 없음. 100% 무제한 이용. 신용카드 불필요.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
무료 라이브 데모를 예약하세요
Booking Badge

전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.

Iron Software의 고객 로고
부담 없는 무료 상담을 받아보세요
아래 양식을 작성하시거나 sales@ironsoftware.com으로 이메일을 보내주세요.
고객님의 정보는 항상 비밀로 유지됩니다.
전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.
Iron Software의 고객 로고
지금 바로 30일 무료 체험판 키를 받으세요.
신용카드나 계정 생성은 필요하지 않습니다.
PDF용 Java Maven 라이브러리
Maven을 사용하여 설치하세요

버전: 2026.6

<dependency>
   <groupId>com.ironsoftware</groupId>
   <artifactId>ironpdf</artifactId>
   <version>2026.6.1</version>
</dependency>
https://central.sonatype.com/artifact/com.ironsoftware/ironpdf/2026.6.1
or
자바 PDF JAR
JAR 파일 다운로드

버전: 2026.6

프로젝트에 수동으로 설치하세요