如何创建 GlobalSign 时间戳摘要?

如何创建 GlobalSign 时间戳摘要?

我正在尝试使用 Global Sign 数字签名服务 API 来签署 PDF 文档。我收到了他们的一些文档。但我无法理解他们要求提供“摘要”的原因。文档建议我使用 SHA256 进行摘要,对其进行十六进制编码,然后将其转换为大写字母。但是,我不确定他们想要编码什么。它只说了一个“对象”,但没有说明对象中的内容。

文档页面:

https://downloads.globalsign.com/acton/media/2674/digital-signing-service-api-documentation#timestamp__digest__get

他们的签名 API 中有两个参考:

  • /身份/ {id} /签名/ {摘要};签名哈希:一旦创建私钥和证书,并且它们在单个签名会话中有效,它们可用于执行多个签名操作。摘要必须是大写的十六进制编码的 SHA256 消息摘要。返回的签名也将是十六进制编码的。
  • /时间戳/{摘要};请求时间戳:此 API 提供符合 RFC3161 的时间戳以包含在签名中。

我有与 GlobalSign 合作的凭证。我能够成功使用他们的“/login”api 调用。下一步是使用他们的“/timestamp/{digest}”api。摘要中有什么?

答案1

为了创建摘要,您需要对要签名的 PDF 进行哈希处理。它应该是大写的。下面是我这样做的方法。

$pdf = file_get_contents("chicken.pdf");
$digest = strtoupper(hash('sha256', $pdf));

另外,请确保您的标头正确。它应包含从 /login 调用收到的承载令牌,如下所示:

$headers = array('Authorization: Bearer '. $access_token);

如果您在标题中留下不必要的信息,您将得到 504 超时。

答案2

您需要在本地执行大部分签名过程 - 唯一的区别是您调用 API 而不是使用本地 crt/pem/key 文件(或智能卡)。

如果您尝试创建可在 Adob​​e Reader 等应用程序(在其“签名”面板中)中看到的签名,则需要按照以下文档进行操作:

第一个文档(PDF 规范)告诉您摘要中包含哪些字节范围,以及如何将生成的签名嵌入回 PDF 文档中。

请注意 PDF需要时间戳与数字签名配对——你不能只是时间戳。

相关内容