我使用数字签名来签署发票(我国法律要求数字发票必须使用数字签名)。问题是,我当地的机构颁发的签名证书有效期只有一年(几乎所有证书颁发机构都这样做)。
每年我都会收到一堆 PDF,Acrobat Reader 会提示无法验证签名,因为证书可能已过期或被吊销。(我使用的是 64 位 Linux 的第 9 版,但 Windows 的 X 版也有同样的问题)。
是否有程序可以告诉我这种无法验证的签名对于给定的公共证书是否有效以及何时有效?
(如果没有,从技术上来说可以将其拼凑起来吗?)
谢谢,彼得
答案1
@ThorX89 - 您需要为签名添加时间戳。这将解决您的问题。
基本上,您使用有效的(当时)证书来签署 PDF,这是由第三方 CA 加盖时间戳的(大多数证书颁发机构允许您使用他们的时间戳服务器 - 请与您的提供商核实),并且时间戳本身由 CA 颁发的证书进行验证。
在 Adobe Acrobat(或 Reader)中,编辑 > 首选项 > 安全 > 检查需要证书吊销检查以便在签名验证期间尽可能成功 - 然后在下面的框中选择安全时间(时间戳)选项。
只要您的证书在签名时有效,且 Adobe 中正确设置了时间戳服务器,即使您的证书后来过期或被撤销,Adobe 也会检查您的证书在第三方信任提供商认证的证书安全时间(即时间戳)时是否有效。
要在 Adobe 中设置时间服务器,请转到“高级菜单”>“安全设置”,然后在左侧您将看到时间戳服务器。输入新的时间戳服务器,Adobe 将从其服务器下载证书,该证书将用于验证时间戳。
请记住,您的证书颁发者和时间戳服务器的 CA(如果它们是不同的颁发者)都必须在 Abode 批准信任列表 (AATL) 中,这样当文件查看者在 Adobe Acrobat 9.0 或更新版本中打开文件时,绝对不会出现签名验证错误。如果颁发者不在列表中,即使文件带有时间戳,他们也会看到“无法验证签名”的信息。唯一的解决办法是,查看者必须在他们的 Adobe 软件中信任(您的证书和时间服务器的证书)。选择 AATL 列出的提供商可以解决这个问题(对于 Adobe 产品)。
答案2
您应该处理此问题的方式是在到期日之前提前更新证书,以便客户有足够的时间使用仍然有效的证书查看文档。
尝试将过期证书与某种“以前有效”的证书进行匹配是无稽之谈。无论出于何种目的,过期证书在安全功能方面都是毫无价值的——它并不比创建自签名证书好。
签名验证和信任链的重点在于全部证书的参数必须正确,程序才能将其识别为有效和可信的。伪造看似可信的过期证书与创建由不受信任的 CA 链签名的完全无意义的证书一样容易。
听起来,您想要做的就是以某种方式向用户(或您自己)保证,某些过期的数字证书确实是您的,即使它已经过期。
不要那样做。
如果您将数字证书用作安全性/完整性/真实性/隐私工具,那么除了当前有效、可信的证书之外的任何东西对于上述所有功能都是毫无价值的。此类比较的结果在法医分析或其他领域可能很有趣,但如果您和您的客户是证书的“最终用户”,并且正在使用它来提供保护,那么您(和您的客户)需要认真对待全部无效证书警告相当于有人试图向您提供伪造的文件。