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

Agm*_*nor 50 pdf signature certificates

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

我可以对 PDF 文件做同样的事情吗?如果是,您建议我使用什么方法?我更喜欢依赖于自由软件的解决方案。

Tan*_*n六四 21

您唯一的选择是便携式签名器。下载并运行jar。虽然它需要 p12 文件中的私钥(与智能卡不兼容)。

您可能希望像 qdigidoc 或 gpg 这样的 Ubuntu 文档签名工具可以,但不,它们不处理 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 年以来就没有更新过。
  • 足迹的链接已断开。
  • jPDFSecure(商业)– 2017 年更新,但它是一个 Java 库,而不是用户工具。

  • 2022 年 2 月最佳:http://jsignpdf.sourceforge.net/ JSignPdf 于 2021 年 12 月 19 日更新,易于使用。 (6认同)
  • 截至 2020 年 12 月,Portable Signer 不再是唯一的选择:KDE 的 Okular 现在可以创建其他 PDF 查看器的用户可见的基于证书的嵌入式数字签名(请参阅我的答案)。 (3认同)

Are*_*ski 18

我发现您可以使用 gpg 以在查看器中仍然打开的方式签署 PDF。

gpg --clearsign --output=signed.pdf input.pdf
Run Code Online (Sandbox Code Playgroud)

以上将产生 .asc 文件,它基本上是输入||签名的串联,但文件扩展名被强制为 .pdf 使其在查看器中打开,生成缩略图等。

在此处输入图片说明

您可以再次使用 gpg 验证签名。

$ gpg --verify signed.pdf 
gpg: Podpisano nie, 12 kwi 2015, 19:07:15 CEST z u?yciem RSA kluczem
gpg: Poprawny podpis od "Arkadiusz Bulski <arek.bulski@gmail.com>"
Run Code Online (Sandbox Code Playgroud)

请注意,某些 pdf 不能很好地以这种方式签名,例如优化的 pdf。你应该自己检查结果。

  • PDF 阅读器是否有任何迹象表明这是 PGP 签名的 PDF? (3认同)
  • 也许某些软件会忽略 GPG 标头,但是 [Adobe Acrobat Reader](https://get.adobe.com/reader/) 和 [Foxit Reader](https://www.foxitsoftware.com/pdf-reader/ ) 不喜欢它并认为这样的 PDF 已损坏。所以是的,请注意互操作性问题。 (3认同)
  • 有趣,但问题是关于 S/MIME 证书。 (3认同)
  • 不要对 PDF 使用 --CLEARSIGN。--clearsign 只能应用于文本文件,不能应用于其他类型的文件,包括 PDF 文件。这是因为 --clearsign 确实会更改文件,从而导致失真。请参阅:https://dev.gnupg.org/T5367 (2认同)

小智 14

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

据我所知,Android 版 Acrobat Reader 表示该文档受到保护,这是值得的。

更新'17:去年12月以来,你可以签署PDF文件的LibreOffice通过去File ? Digital signatures ? Sign Existing PDF

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

  • 我注意到它有时无法找到字体,然后它会扭曲整个文档,将文本从页面上推开 (3认同)

小智 9

西班牙政府有一个名为AutoFirma的 GPL 工具,它可以很好地处理 p12 格式的证书。目前它仅提供西班牙语版本,但源代码可在此处Github 上获取,并且可以进行翻译。

  • 需要 Java 运行时环境,自动依赖安装程序似乎无法解析。`sudo apt-get install openjdk-8-jre` (3认同)

Oct*_*ves 8

您可以使用 gpg/seahorse 签署 PDF 文件。

了解更多:https : //help.ubuntu.com/community/GnuPrivacyGuardHowto

例如,您可以使用OpenSignPDF,可以在此处下载:http : //opensignature.sourceforge.net/english.php

我希望这回答了你的问题。

  • 好的,但是请你告诉我你找到了哪些程序? (3认同)
  • 有时,有些人确实需要使用 .p12 进行签名。这不能回答问题。 (2认同)

mak*_*mak 7

好消息!KDE 的 PDF 查看器Okular(带有后端 Poppler)现在支持在 PDF 中嵌入数字签名,类似于 Adob​​e Reader 的功能。详细信息可在TU Dresden 的帖子中找到,他赞助了此功能的实施。

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

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

安装成功后,我可以创建帖子中宣传的数字签名:

  • 打开 PDF
  • 单击“工具”菜单中的“数字签名”。或者,在首选工具栏中添加“数字签​​名”图标并单击它。
  • 在您希望电子签名的可见提示处绘制一个矩形。
  • 如果有多个,对话将要求使用私钥。选择您要使用的那个。
  • 输入密钥的密码。

之后,系统会提示将签名的 PDF 保存在新文件名下。


qwr*_*qwr 5

Master PDF Editor有一个免费版本,可以对 .p12 文件进行签名。

然而,免费版本留下了难看的水印。有趣的是,这可以在程序本身或使用其他 PDF 编辑器(例如 LibreOffice Draw)中删除。我认为第4版不会留下水印。


Mr *_*der 5

我最终做了以下事情

  1. 安装的虚拟盒
  2. 然后安装虚拟盒扩展包(用于USB令牌)
  3. 从 MS 网站免费下载 Windows 10 iso。
  4. 启动进入 Windows,下载 Adob​​e reader 并签署该文档。

不是本机解决方案,但它可以完成工作。