仅在 Adob​​e Reader 中显示无效的合格签名

问题描述

这是带有合格电子签名的 PDF pdf-qualified.invalid.pdf

所有验证应用程序都显示它正确为 PAdES-BASELINE-LT,但 Adob​​e Reader 显示它无效。这个数字签名的 PDF 有什么问题? 它包括 CAdES-BASELINE-LT 签名、所有 OCSP、所有需要的证书。

Adobe reader 显示无效

Adobe reader wrongly says invalid

欧盟验证显示签名在 https://ec.europa.eu/cefdigital/DSS/webapp-demo/validation 处有效

EU validator shows valid

DigiDoc4 应用程序显示签名有效

DigiDoc4 shows valid

https://www.eparaksts.lv/ 表明它是有效的

eparaksts.lv shows valid

这里我们可以看到与数字签名相关的PDF结构

iText Rups shows all needed components there

解决方法

嵌入在您的 PDF 中的签名容器存在一些问题。

您的 PDF 是 1.5 版,并且签名使用子过滤器 ETSI.CAdES.detached。因此,嵌入式签名容器应符合 ETSI EN 319 142-1(PAdES 构建块),该标准也指 ETSI EN 319 122-1(CAdES 构建块)。但也有偏差:

首先,CMSVersion 应设置为 1 或 3(CAdES 4.4)。但在您的情况下,它设置为 5。

然后 SignedData.crls 包含条目,特别是其他类型的条目。在 PAdES 的情况下,这个字段无论如何都不应该使用,特别是不要与此类条目一起使用。 实际上这个条目是上面提到的无效 CMSVersion 的原因:如果 SignedData.crls 包含一个类型为 other 的条目,RFC 5652 需要版本 5。

您的签名容器的 SignerInfo 包含签名时间签名属性。 PAdES BASELINE 签名 (PAdES 6.3) 明确禁止这样做。

它还包含一个 cmsAlgorithmProtection 签名属性。虽然没有明确禁止,但此属性不在 PAdES (PAdES 5.2) 中可能使用的属性列表中。

嵌入式证书中至少还有一个问题:其中之一有很长的扩展密钥用法列表,时间戳就是其中之一。但这种扩展的密钥用法只能单独使用。

这是我停止寻找更多问题的地方,因此列表可能不完整。您可能应该从使用不太复杂的签名容器开始,然后(如果可行)尝试一一添加额外的功能,以检查它们是否意味着 Adob​​e Reader 出现问题。

顺便说一下,这样的问题实际上可能是由于 Adob​​e Reader 不支持您签名中使用的某些算法; Adobe Reader 支持的加密算法列表非常短,不支持欧盟允许用于合格签名的一些算法。

,

CAdES 签名是基线 LT 水平。当将 CAdES 降级到基线 T 时,它开始工作。

除非某些规范明确指出不允许基线 LT 级别的 CAdES,否则我会说它的 Adob​​e Reader 错误。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...