合格签名仅在 Adobe Reader 中显示无效
Qualified signature showing invalid only in Adobe Reader
这是带有合格电子签名的 PDF pdf-qualified.invalid.pdf
所有验证应用程序都显示它是正确的 PAdES-BASELINE-LT,但是 Adobe Reader 显示它无效。这个经过数字签名的 PDF 有什么问题?
它包括 CAdES-BASELINE-LT 签名、所有 OCSP、所有需要的证书。
Adobe reader 显示其无效
欧盟验证显示签名在 https://ec.europa.eu/cefdigital/DSS/webapp-demo/validation
有效
DigiDoc4 应用显示签名有效
https://www.eparaksts.lv/ 表示有效
这里可以看到数字签名相关的PDF结构
您的 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 包含条目,特别是类型为 other 的条目。在 PAdES 的情况下,这个字段无论如何都不应该使用,特别是不应该与这样的条目一起使用。 实际上这个条目是上面提到的无效 CMSVersion 的原因:如果 SignedData.crls 包含一个类型为 other 的条目,RFC 5652 需要版本 5.
您的签名容器的 SignerInfo 包含一个 signingTime 签名属性。 PAdES BASELINE 签名 (PAdES 6.3) 明确禁止这样做。
它还包含一个 cmsAlgorithmProtection 签名属性。虽然没有明确禁止,但此属性不在可在 PAdES (PAdES 5.2) 中使用的属性列表中。
嵌入式证书中也至少存在一个问题:其中一个证书有一长串扩展密钥用法,timeStamping 就是其中之一。但是扩展密钥用法只能单独使用。
这是我停止寻找更多问题的地方,因此列表可能不完整。您可能应该从使用不太复杂的签名容器开始,然后(当可行时)尝试一项一项地添加额外的功能,以检查它们是否意味着 Adobe Reader.
的问题
顺便说一下,这样的问题实际上可能是由于 Adobe Reader 不支持您签名中使用的某些算法; Adobe Reader 支持的加密算法列表非常短,不支持欧盟允许用于合格签名的许多算法。
CAdES 签名是基线-LT 级别。将 CAdES 降级到基线-T 后它开始工作。
我会说它的 Adobe Reader 错误,除非某些规范明确指出不允许基线 LT 级别的 CAdES。
这是带有合格电子签名的 PDF pdf-qualified.invalid.pdf
所有验证应用程序都显示它是正确的 PAdES-BASELINE-LT,但是 Adobe Reader 显示它无效。这个经过数字签名的 PDF 有什么问题? 它包括 CAdES-BASELINE-LT 签名、所有 OCSP、所有需要的证书。
Adobe reader 显示其无效
欧盟验证显示签名在 https://ec.europa.eu/cefdigital/DSS/webapp-demo/validation
有效DigiDoc4 应用显示签名有效
https://www.eparaksts.lv/ 表示有效
这里可以看到数字签名相关的PDF结构
您的 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 包含条目,特别是类型为 other 的条目。在 PAdES 的情况下,这个字段无论如何都不应该使用,特别是不应该与这样的条目一起使用。 实际上这个条目是上面提到的无效 CMSVersion 的原因:如果 SignedData.crls 包含一个类型为 other 的条目,RFC 5652 需要版本 5.
您的签名容器的 SignerInfo 包含一个 signingTime 签名属性。 PAdES BASELINE 签名 (PAdES 6.3) 明确禁止这样做。
它还包含一个 cmsAlgorithmProtection 签名属性。虽然没有明确禁止,但此属性不在可在 PAdES (PAdES 5.2) 中使用的属性列表中。
嵌入式证书中也至少存在一个问题:其中一个证书有一长串扩展密钥用法,timeStamping 就是其中之一。但是扩展密钥用法只能单独使用。
这是我停止寻找更多问题的地方,因此列表可能不完整。您可能应该从使用不太复杂的签名容器开始,然后(当可行时)尝试一项一项地添加额外的功能,以检查它们是否意味着 Adobe Reader.
的问题顺便说一下,这样的问题实际上可能是由于 Adobe Reader 不支持您签名中使用的某些算法; Adobe Reader 支持的加密算法列表非常短,不支持欧盟允许用于合格签名的许多算法。
CAdES 签名是基线-LT 级别。将 CAdES 降级到基线-T 后它开始工作。
我会说它的 Adobe Reader 错误,除非某些规范明确指出不允许基线 LT 级别的 CAdES。