如何解决是否可以仅在应用 pdf 签名时而不是在使用 iText 7 创建哈希时设置 CRL 没有至少不是一种有用的方式选项取决于个人资料
我正在使用以下代码创建最终由专用 HSM 签名的 pdf 文档的哈希值。 CRL 和 OCSP 参数在此处设置为空,因为它们尚不清楚。此代码在我自己的 IExternalSignatureContainer.Sign 实现中执行。
//Create the hash of the pdf for signing
byte[] sh = pkcs7Signature.GetAuthenticatedAttributeBytes(hash,null,PdfSigner.CryptoStandard.CMS);
using (SHA256 sha256 = SHA256.Create())
{
sh = sha256.ComputeHash(sh);
}
// >> Call HSM for creating the signature
然后 HSM 返回签名、CRL 和 OCSP(这意味着我之前无法访问 CRL)。创建签名后,我会生成 PKCS7 容器,该容器除了签名外还包含一个 CRL。
pkcs7Signature.SetExternalDigest(signature,"RSA");
return pkcs7Signature.GetEncodedPKCS7(hash,crl,PdfSigner.CryptoStandard.CMS);
在这种情况下,pdf 中生成的签名无效。 我做了一些测试,当我将 CRL 添加到 GetAuthenticatedAttributeBytes 时,一切正常。
我的问题是我当时没有 CRL。
问题: 是否可以在没有 CRL 的情况下创建哈希,然后将 CRL 应用于创建的 PKCS7 容器并在 pdf 中保持签名有效?
解决方法
问题:是否可以在没有 CRL 的情况下创建哈希,然后将 CRL 应用于创建的 PKCS7 容器并在 pdf 中保持签名有效?
没有。至少不是以一种有用的方式。不过,根据所遵循的确切签名配置文件,您之后可以附加 CRL 以增量更新到已签名的 PDF。
详细说明:
没有
在普通的 ISO 32000-1 互操作签名撤销信息(CRL 和 OCSP 响应)中添加了特定的、Adobe 定义的签名属性(又名身份验证属性) ,请参阅 ISO 32000-1 部分 12.8.3.3.2 撤销信息。
签名属性是签名内容的一部分,因此通过在没有它的情况下计算散列但稍后将其包含在完成的签名容器中,您将获得无效签名。
至少不是一种有用的方式。
当然可以考虑将 CRL 添加到 CMS 签名容器中,根据 CMS 规范,CRL 是预期的。这是容器的未签名部分,因此可以在不影响签名有效性的情况下添加 CRL。
但根据 PDF 规范,嵌入在 PDF 中的 CMS 容器中的撤销信息应在其他地方使用,因此签名验证器不应使用此类 CRL,尤其是 Adobe Reader 不会。
选项取决于个人资料。
以上讨论的重点是根据普通 ISO 32000-1 在 PDF 中嵌入撤销信息。
如果您可以根据 ISO 32000-1 加上 ESIC 扩展级别 2 或 ADBE 扩展级别 8,或根据 ISO 32000-2 创建签名,则还有另一种选择:您可以在在 PAdES 文档安全存储 DSS 结构中对已签名的 PDF 进行增量更新。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。