如何使用 S/MIME 证书对 PDF 进行数字签名?

如何使用 S/MIME 证书对 PDF 进行数字签名?

我已经获得了由权威机构颁发的 S/MIME 证书(.p12 文件)。在 Writer 中使用它,我可以按照以下步骤对文档进行数字签名: 如何使数字证书可供 LibreOffice Writer 用于数字签名?

我可以对 PDF 文件执行相同的操作吗?如果可以,您建议我使用什么方法?我更喜欢依赖免费软件的解决方案。

答案1

您唯一的选择是 Portable Signer。下载并运行 jar。但它需要 p12 文件中的私钥(与 SmartCard 不兼容)。

您可能期望 Ubuntu 文档签名工具(例如 qdigidoc 或 gpg)能够做到这一点,但它们不能使用 PDF 签名。

您可能期望 Ubuntu PDF 操作工具(如提供加密功能的 qpdf 或提供水印功能的 pdftk)也能提供签名功能,但事实并非如此。

可供您使用的开源工具的完整列表是: http://wiki.cacert.org/PdfSigning

不幸的是,目前这些工具都没有得到维护,在 Ubuntu 软件包中也找不到。Portable Signer 是所有工具中维护得最好的。

  • Portable Signer 自 2014 年以来就没有更新过 - 这是所有签名器中维护得最好的。
  • jSignPdf 自 2013 年以来尚未更新。
  • jPdfSign 自 2006 年以来尚未更新。
  • CACert 的 PdfSigner 使用过时的 iText 工具。
  • OpenSignature 自 2008 年以来一直未更新。
  • Footprint 的链接已损坏。
  • 安全PDF(商业)—— 2017 年更新,但它是一个 Java 库,而不是用户工具。

答案2

好消息!KDE 的 PDF 查看器奥克拉尔(使用后端 Poppler)现在支持 PDF 中的嵌入式数字签名,类似于 Adob​​e Reader 的做法。详细信息请参见德累斯顿工业大学发帖,他赞助了该功能的实现。

该功能预计将出现在 2021 年 4 月的版本中(Okular v21.04、Poppler v21.01)。截至 2020 年 12 月,已经可以在本地编译当前开发版本的 Okular 和 Poppler PDF 库以获取该功能。德累斯顿工业大学的帖子提供了说明和构建脚本。

我已经按照脚本中的说明(请注意在线预览中的截断行!)在 KDE Neon 5.20(基于 Ubuntu 20.04 LTS)上使用 Poppler 完成了安装。提交 407293bf和 Okular提交 110ccd61(当然,未来的版本应该会继续工作,所以这只是为了完全可重复性)。我已经安装了/usr/local/并创建了一个启动脚本okular-sign,其变量定义与 TU Dresden 手册中一样。Okular 的新版本标识为“版本 21.03.70”。与 KDE 的典型情况一样,这个 Okular 的“本地”版本确实会干扰发行版中的官方版本,即使启动旧二进制文件,官方版本也会部分更改为新版本(大概这是由于 KDE 的系统范围注册了“部分”或某些此类组件)。我希望当我的发行版软件包中发布签名支持时,可以恢复到官方版本。

安装成功后,我可以创建一个数字签名,如帖子中所述:

  • 打开 PDF
  • 单击“工具”菜单中的“数字签名”。或者,在您喜欢的工具栏中添加“数字签​​名”图标并单击它。
  • 在您想要显示电子签名可见提示的位置绘制一个矩形。
  • 如果有多个私钥,对话框会询问要使用的私钥。选择您要使用的那个。
  • 输入您的密钥的密码。

然后,系统会提示您以新文件名保存已签名的 PDF。

答案3

如果你在 Writer 中提供证书如果使用它导出为 PDF功能,您还可以在导出之前从对话框的最后一个选项卡对生成的 PDF 进行数字签名。

据我所知,Android 版 Acrobat Reader 显示该文档受到保护,不管它值不值得。

更新 '17:自去年 12 月起,您可以使用 LibreOffice 签署 PDF 文件通过去File → Digital signatures → Sign Existing PDF

这将打开能够签署 PDF 的 Draw。

答案4

有一个名为 GPL 工具汽车公司来自西班牙政府,它与 p12 格式的证书配合得很好。目前它只提供西班牙语版本,但源代码可在此处获得或者在 Github 上并且可以翻译。

相关内容