需借助PKI工具实现PDF数字签名:一、Acrobat Pro图形化操作,支持本地或CA证书;二、PDFtk+OpenSSL命令行批量处理;三、LibreOffice仅限ODF转PDF嵌入签名;四、iText7程序化支持PAdES与LTV。

如果您希望为PDF文件添加数字签名以确保其完整性与身份认证,则需要借助支持PKI标准的证书工具来创建并应用安全证书。以下是实现此目标的具体步骤:
一、使用Adobe Acrobat Pro创建并应用数字签名
Adobe Acrobat Pro内置了完整的数字签名工作流,可直接调用本地安装的证书或从可信证书颁发机构(CA)导入的PFX文件完成签名。该方法适用于Windows和macOS平台,且签名结果符合ISO 32000-2标准。
1、启动Adobe Acrobat Pro,打开待签名的PDF文件。
2、点击右侧“工具”面板中的“保护”,选择“添加数字签名”。
3、在文档中拖出签名域位置,弹出“签名属性”对话框。
4、点击“更多选项” → “选择证书”,从列表中选取已安装的有效证书;若无证书,点击“获取新证书”跳转至Adobe官方推荐CA页面申请。
5、勾选“在签名时对文档进行时间戳处理”,输入口令后点击“签名”完成应用。
二、通过PDFtk与OpenSSL命令行方式签名
该方法依赖开源工具链,适用于Linux或具备终端环境的系统,不依赖图形界面,适合批量处理场景。需预先准备私钥、证书及时间戳URL等参数。
1、使用OpenSSL生成RSA密钥对:openssl genrsa -out private.key 2048。
2、创建证书签名请求(CSR):openssl req -new -key private.key -out request.csr。
3、向CA提交CSR获取签发证书(如DigiCert、GlobalSign),保存为cert.crt。
4、将私钥与证书合并为PKCS#12格式:openssl pkcs12 -export -in cert.crt -inkey private.key -out cert.p12。
5、使用pdftk签名PDF:pdftk input.pdf sign_file cert.p12 output signed.pdf,按提示输入P12口令。
三、使用LibreOffice Draw嵌入式签名(仅限ODF转PDF流程)
LibreOffice本身不支持对已有PDF签名,但可在编辑ODF源文档阶段插入数字签名,并导出为含签名元数据的PDF/A-2b格式。该方式适用于内部文档流转且无需第三方验证链的轻量级场景。
1、在LibreOffice Writer中完成文档编辑后,点击“文件” → “数字签名” → “签名文档”。
2、选择已安装的X.509证书,确认私钥访问权限。
3、点击“导出为PDF”,在导出对话框中勾选“导出数字签名”选项。
4、设置PDF/A兼容性级别为PDF/A-2b,完成导出。
四、借助Java库iText7程序化签名
iText7提供底层API用于构造符合PAdES标准的增量式签名,支持LTV(长期验证)扩展,适合集成进企业文档系统。签名过程不修改原始字节流,仅追加签名对象与CRL/OCSP响应。
1、在Maven项目中引入依赖:com.itextpdf:itext7-core:7.2.5(含kernel、layout、sign模块)。
2、加载PDFReader与PdfSigner实例,指定输出路径为新文件名。
3、调用signer.signDetached()方法,传入Bouncy Castle提供的CMSSignedDataGenerator实例。
4、配置签名可见性:通过PdfSignatureAppearance设置签名域坐标、背景图及文本内容。
5、注入时间戳:使用TSAClientBouncyCastle连接RFC 3161时间戳服务器URL,确保签名时间不可篡改。










