存在冲突的签名证书属性 - 来自 TSA 的 PDF 时间戳

Conflicting signing certificate attributes present - Timestamp from TSA for PDF

我们的 TSA 最近升级了他们的 TSA 服务器,但这会导致在我们尝试对 PDF 进行数字签名和时间戳(使用 C# 代码)时出现 "Conflicting signing certificate attributes present" 错误。

如果我使用 TSA 的旧服务器或 SignFiles 测试服务器,那么一切都会按预期运行,但是一旦我切换到新服务器,就会出现问题。

我们正在使用 SignFiles,它看起来是 BouncyCastle 的简单包装器。错误发生在 Bouncy Castle "Validate(...)" 方法中。

VS Code Showing Error

我认为该错误是以下突出显示的调用的结果。

BouncyCastle Code - Validate(...) where error happens

在这一点上,我有点迷茫,因为我不知道上面的代码正在检查什么值,但我认为它可能是 "Enhanced Key Usage" 值。

如果是,那么我看到旧时间戳(左侧)和不起作用的新时间戳(右侧)之间存在以下差异。

Working and Non-Working Certificates Returned by TSA

谁能告诉我这是不是正在检查的正确值?

谁能告诉我为什么会发生这个错误,TSA 是否可以在他们的设置中更正它,时间戳是如何生成的,或者 Bouncy Castle 是否需要更新才能与新的 TSA 服务器一起使用?

我们将继续使用旧服务器,但需要修复此问题才能利用速度更快的新服务器。

我只在以下位置发现了一个与此相关的问题: http://bouncy-castle.1462172.n4.nabble.com/Time-Stamp-with-both-SigningCertificate-and-SigningCertificateV2-td3457605.html

谢谢,

罗布

您的客户端库似乎在内部使用早于 1.8 的 BouncyCastle,它错误地处理了时间戳。你已经正确地发现这个问题是(由我)在 JIRA issue 85 中报告并在 BouncyCastle 1.8 中修复的。

原始 RFC3161 compliant timestamps included only SigningCertificate (OID 1.2.840.113549.1.9.16.2.12) CMS attribute with SHA-1 hash of TSA certificate. But since whole world abandoned SHA-1, RFC5035 更新了 RFC3161 并允许使用 SigningCertificateV2 (OID 1.2.840.113549.1.9.16.2.47) CMS 属性和 TSA 证书的 SHA-256(或任何其他)散列。它还允许同时使用这两个属性,以支持可能不支持新哈希算法的旧版客户端。所以 IMO 完全可以让 TSA 包含这两个属性。

您有两个选择:

  1. 请您的客户端库提供商将其升级到 BouncyCastle 1.8,其中 the issue has been fixed。 IMO 这会更容易。
  2. 请您的时间戳提供商重新配置他们的 TSA 服务器,这样它就不会在其生成的时间戳中包含这两个 CMS 属性。 IMO 这会更难。

如果有什么地方不够清楚或您需要更多详细信息,请告诉我。