pdf - 如何使用带有自签名证书的 TSA 服务为 pdf 添加时间戳?
问题描述
我正在尝试做的事情:
证明 PDF 文件在某个时间点之后没有被更改。
我是如何尝试的:使用自签名 RSA 4096 pkcs12 证书并使用受信任的 RFC3161 TSA 服务对 PDF 进行签名。
我是如何尝试的(详细):使用 OpenSSL 创建证书:
openssl genrsa -out john_doe_priv_rsa_key_4096.pem 4096
openssl req -new -key john_doe_priv_rsa_key_4096.pem -out john_doe_sign_req_4096.csr
openssl x509 -req -days 356 -in john_doe_sign_req_4096.csr -signkey john_doe_priv_rsa_key_4096.pem -out john_doe_cert_rsa_4096.crt
openssl pkcs12 -export -out john_doe_cert_rsa_4096.p12 -inkey john_doe_priv_rsa_key_4096.pem -in john_doe_cert_rsa_4096.crt
然后我使用瑞士政府提供的免费工具 ( https://www.e-service.admin.ch/wiki/display/openegovdoc/BatchSigner+Download ) 将签名应用于 PDF 并使用时间戳服务,特别是https://www.bit.admin.ch/bit/de/home/subsites/allgemeines-zur-swiss-government-pki/tsa-service.html不幸的是,这些链接仅提供德语、法语和意大利语,而不是英文(我需要的批处理文件在此处提供了一些修复:https ://pastebin.com/SA4S2udW )。我不需要使用这个工具——它是迄今为止我发现的唯一一个通过命令行签署 PDF 并使用 TSA 进行时间戳的工具。
我得到的结果是: 签名的 PDF 文件
原始 PDF 文件是这样的: 原始 PDF 文件
我用于签名的自签名证书是这样的: 用于签名的证书(密码:123)
现在我的问题:
- 如果我正确理解时间戳过程,那么即使证书本身不受信任(只要 TSA 受信任),也无法证明 PDF 没有被篡改,因为它已被时间戳 - 这种理解是否正确?
1.a 如果是:为什么 Acrobate 会说“签名包含嵌入的时间戳,但无法验证”?
1.b 如果否:是否有另一种方法可以使用 TSA 服务为来自受信任的 TSA 服务的 pdf 添加时间戳,而无需官方颁发的证书?
我如何证明 PDF 在我添加时间戳之后没有被篡改?
签名的 PDF 的大小大约是原始 PDF 的 4 倍——这真的是添加了这么多数据的签名还是引入了其他有效负载?
解决方案
推荐阅读
- r - R 奇怪的 {if-else} 行为
- elsa-workflows - Elsa-workflows 重定向 Http 动作行为
- javascript - Rails,无法自定义输入验证错误消息
- sql - 对sql查询中的行和列求和
- android - TabLayout 中的第一个选项卡未更新 TypeFace 和 TextSize
- ajax - 如何在同一个脚本中组合这两个 datepicker ajax 代码?
- javascript - 切换页面时如何防止组件重新渲染(或至少保持状态不变)?
- laravel - 如何从 Laravel 的请求中获取 Telescope UUID?
- css - 对 CSS 转换做出反应
- javascript - Owl Carousel 在我的代码中不起作用。出了什么问题?