如何生成证书来以电子方式签署 PDF?

如何生成证书来以电子方式签署 PDF?

我一直在想办法弄清楚我需要创建哪种证书,以及如何创建它来使用 LibreOffice 签署 PDF。我创建了一个 GnuPG 密钥,但没有用。我尝试创建一个私钥(通过“密码和密钥”应用程序),但它不允许我这样做。

没有可点击的按钮

我哪里做错了?

我正在尝试制作一个可以用于电子签名 PDF 的证书。

在创建文档时,会在 libreoffice 中显示一些内容。

在此处输入图片描述

提前致谢。

答案1

也许值得给出更多细节,如何使用 Libreoffice 签署 PDF。有一些陷阱,这是保存我的经验的好地方。

首先获取一个可用于签名/加密电子邮件的 x509 证书。获取证书的地点会不断变化。免费的证书很少见,最坏的情况下,请创建一个自签名证书。网络上有很多关于如何执行此操作的说明。最后,您需要一个包含 pk12 格式的私钥的签名证书。

目前,我们假设 pk12 文件名为:cert.pk12

$ mkdir -p "~/.pki/cert8"
$ certutil -N -d ~/.pki/cert8/
Enter a password which will be used to encrypt your keys.
The password should be at least 8 characters long,
and should contain at least one non-alphabetic character.

Enter new password: 
Re-enter password: 
$ pk12util -d ~/.pki/cert8/ -i cert.pk12
Enter Password or Pin for "NSS Certificate DB":
Enter password for PKCS12 file: 
pk12util: PKCS12 IMPORT SUCCESSFUL
$ ls ~/.pki/cert8/
cert8.db  key3.db  secmod.db
$ certutil -L -d ~/.pki/cert8/

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

[email protected]                                                u,u,u
Xxxxxxxxxxxxxxxxxxxxxxxxxxxx CA                              ,,   
XXxxxx xxxxxxxxxxxxxxxxxxx CA                                ,,   

现在证书已保存在数据库中。在 Libreoffice 的选项中(工具 -> 选项... -> 安全 -> 证书... -> 选择 NSS 路径...)需要配置数据库的路径。

现在应该可以在“数字签名”对话框中选择该证书。

至少所有工具都向我显示 PDF 已签名。其中大多数都向我显示签名有效。但 Windows Acrobat Reader 仍然不相信。在 Acrobat 中,您需要明确手动信任证书。但我从 Linux 获得的 PDF 被标记为“已修改”。也许传输将 Linux 行尾更改为 Windows 行尾?

似乎只有通过“导出为 PDF”才可使用“时间戳授权机构”(TSA)。

添加:使用seahorse(通过单击“启动证书管理器”从 Libreoffice 启动)无法添加 x509 证书(至少在撰写本文时不能)。

答案2

下面介绍了如何在(例如 Debian)上的 libreoffice 中生成自己的用于签署文档的证书,并进行相应的设置:

准备

安装必要的工具:

sudo apt-get update && sudo apt-get install openssl libnss3-tools

制作证书

第一的,生成 x509 证书

openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
-keyout signing.key -out signing.crt -subj "/CN=John T Doe" \
-addext "subjectAltName=email:[email protected]"

...

..+......+..+....+........+.+.........+...........+.+.....+.+.....+...+.+....
+.....+.+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++*.........+..+.........+....+.........+...............+......+......
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-----

...

注意subjectAltName可以包含email: 反而DNS 条目数

下一个,将证书转换为 p12 格式的密钥

openssl pkcs12 -export -in signing.cert -inkey signing.key \
-out signing-certificate.p12 -name "John T Doe"

...
Enter Export Password:
Verifying - Enter Export Password:
...

制作 NSS 数据库

接下来,我们需要为 NSS 准备数据库路径并生成数据库

mkdir -p ~/.pki/nssdb
certutil -d ~/.pki/nssdb -N

...
Enter Password or Pin for "NSS Certificate DB":
Enter a password which will be used to encrypt your keys.
The password should be at least 8 characters long,
and should contain at least one non-alphabetic character.

Enter new password:
Re-enter password:
Password changed successfully.

...

请注意,该密码是您的默认主 Firefox 密码(在 Debian/Ubuntu 上)。因此,如果您尚未设置,它将是一个空字符串 - 一旦你设置了,它将提示你输入一个新的并更改它

或者,不添加密码即可(参考文献 4):

certutil -d ~/.pki/nssdb -N --empty-password

最后,将 p12 证书导入数据库

pk12util -d ~/.pki/nssdb -i signing-certificate.p12

...

Enter Password or Pin for "NSS Certificate DB":
Enter password for PKCS12 file:
pk12util: PKCS12 IMPORT SUCCESSFUL

...

请注意,如果你想要更高级一点,可以使用 -k ${database.password.file} -w ${certificate.password.file} 以编程方式标记密码

配置 LibreOffice

  1. 打开 LibreOffice
  2. 选择窗户
  3. 选择选项
  4. 选择安全在左侧
  5. 在右侧,选择证书经过证书路径
  6. 选择选择 NSS 路径在出现的对话框底部,选择正确的路径(即~/.pki/nssdb),选择好的(确保选择了新的手册路径),最后现在重启
  7. 重启后,打开一个文档,选择文件, 选择导出为, 选择导出为 PDF
  8. 导航到“数字签名”选项卡,您应该看到一切正常: 需要 NSS 数据库密码 生成并导入可用于签名的证书 证书详情 1 证书详情 2
  9. 然后选择相关证书以使用它进行签名: 选择要签名的证书
  10. 输入您的证书密码
  11. 输入您的位置和原因(如果需要) 添加签名详细信息
  12. 选择出口并保存您的文档 保存已签名的文档

最后你可以进入文件数字签名...签署现有 PDF,然后打开您签名的 PDF 来验证签名是否存在(您也可以通过这种方式签名):

验证已签名的 PDF 文档 1 验证已签名的 PDF 文档 2

参考:

答案3

获得证书有三个基本阶段。

  1. 您可以从认证机构获得证书。无论您选择政府机构还是私人公司,通常都需要为这项服务付费,例如当他们认证您的身份时。很少有其他机构免费颁发证书,例如开源项目“CAcert”,它基于著名且可靠的信任网络模型,并且越来越受欢迎。

  2. 如果您使用的是 Solaris 或 Linux,则必须安装最新版本的 Thunderbird 或 Firefox 来安装加密所需的一些系统文件。

  3. 签署文档中的宏。通常,宏是文档的一部分。如果您签署文档,文档中的宏将自动签署。

参考

相关内容