答案1
如何在 Okular 中签署 PDF?
据我所知,目前 Okular 的后端都不支持电子签名,尽管该功能已被多次请求。
或者,可以使用 GPG 或其众多前端(例如 KDE 中的 Kleopatra 或 Kgpg)的独立签名对 PDF(或任何其他文件)进行签名。
我有一份我的签名的 .png 文件,我基本上想将其插入到文档的虚线上
不要这样做。
任何有权访问您的 PNG 或使用该 PNG 的任何文档(例如您打算嵌入此签名的 PDF)的人,都将获得您亲笔签名的完美、可无限复制的副本。它根本没有提供任何安全性,事实上,这对安全性是有害的:在看到文档上的潦草字迹后,收件人可能会认为它是真实的,而不会费心检查是否有实际(且合法有效的)电子签名。Acrobat 在这方面是(至少曾经是)一个大问题——我曾见过由于这个构思拙劣的功能而轻易“伪造”的文档。
答案2
Okular(和 Poppler)将于 2021 年 4 月开始在其正式版本中支持 PDF 中的数字签名。详情请参阅德累斯顿工业大学发帖,该组织赞助了该功能的实施。请注意,这并不是要插入带有扫描签名的图形,而是要向 PDF 添加可靠的数字认证,类似于某些 Adobe 产品所支持的功能。
截至 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
Okular 受到后端 poppler 的限制。在过去的几个月里,poppler 一直在慢慢增加对 nss 后端的支持。https://bugs.freedesktop.org/show_bug.cgi?id=16770
然而,直到该功能在其 API 中公开(也正在开发中)并且该 API 在 Okular 中使用之前,它将无法签署/验证已签署的 PDF。
最新版本的 poppler 附带的 cli 工具 pdfisg 可以读取签名并确定签名是否有效以及证书颁发者是否可信。
对于签名,有一个名为 PortableSigner 的 FOSS java 应用程序可以签署 PDF 文档。http://portablesigner.sourceforge.net/
LibreOffice 的最新版本还具有文档签名功能。
答案4
没有可以签署 Adobe PDF 的 FOSS PDF 阅读器。原因是使用 Adobe 工具创建的可签署 PDF 使用 Adobe 专有的 PDF 格式扩展。PDF 是一种开放格式,但在这种情况下,Adobe 创建了自己的扩展,这些扩展由他们拥有、获得专利和许可,以防止其他人能够这样做。
使用 FOSS 软件对 PDF 进行签名的唯一方法是将 PDF 包装在开放的数字签名文件格式中。
您还可以研究远程签名服务,您的 PDF 将以 HTML 形式呈现给您,然后您可以对其进行签名。您可以使用类似于手写签名的图片进行弱签名 - 正如其他答案和评论所指出的那样,这是一个非常糟糕的主意。您可以使用加密密钥进行更强的签名 - 通常前提是远程签名服务持有您的密钥。我不知道是否有任何远程签名服务允许您持有密钥,例如,在双因素令牌设备上或在您自己的硬盘上加密。