如何使用离线签名和 OCSP 响应创建 PADES

How to create PADES using offline signature and OCSP response

我很难从文档和源代码中找出 Esig DSS java 套件。 (eu.europa.esig.dss.* 树)

我们连接到 Swedish BankID 以签署 PDF 和简单的纯文本。 响应是一个 SOAP XML,带有签名字段和 OCSP 响应。

最终目标是将这两个部分组合成一个对象"a valid signature",该对象可以嵌入到 PDF 中(使用 DSS 和 PDFbox)。

BankID Soap 字段的内容似乎具有适合 DSS 工具的格式:

签名可以加载

DSSDocument sigDoc = new InMemoryDocument(xmlSignature)
SignedDocumentValidator documentValidator = SignedDocumentValidator.fromDocument(sigDoc);
// ...
AdvancedSignature advancedSignature = documentValidator.getSignatures().get(0);

并且可以使用

读取 OCSP 响应
ExternalResourcesOCSPSource source = new ExternalResourcesOCSPSource(ocspBytes);
BasicOCSPResp basicOCSPResp = source.getContainedOCSPResponses().get(0);

我可以从对象中打印出各种信息,找到嵌入的证书等,所以格式看起来是合法的。

问题: 如何从 ExternalResourcesOCSPSource 获取有效的 OCSPToken?

我一直 运行 试图将两者组合成一个 AdvancedSignature(如果这是我可以用来嵌入 PDF 的内容)。

无法使用第三方系统提供的高级数字签名来创建有效的签名 PDF

PAdES 签名始终封装在 PDF 文档中,因此签名服务不可能return使用 DSS 认为有效的分离 PAdES 签名。

它可能在 DSS 可以处理的 SOAP 消息中提供分离的 CAdES 或 XAdES 签名(DSS 提供高级 API 以使用 XAdES、CAdES、PAdES 和 aSiCS 格式签署文档)。

两种格式都支持嵌入OCSP响应,但都需要添加时间戳,这使得构建最终格式更加困难。这可能是在 SOAP 消息中使用自定义字段到 return OCSP 响应

的原因

XAdES 和 PAdES 在概念上相似但在结构上不同。 XAdES 签名是 XML 而 PAdES 是二进制的。 XML 签名无法转换为 PAdES

PAdES 和 CAdES 使用 CMS,两者都是二进制的,并且使用 ASN.1 语法。但签名的消息不同,CAdES 签名是在整个文档(和一些其他属性)上计算的,而 PAdes 使用 PDF 文档的某些数据。因此cades签名也无法转换为PAdes。