猿问

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

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


我们连接到瑞典银行 ID 来签署 PDF 和简单的纯文本。响应是带有签名和 OCSP 响应字段的 SOAP XML。


最终目标是将这两个部分组合成一个单一的对象“有效签名”,可以嵌入到 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 的)。


慕标5832272
浏览 212回答 1
1回答

呼唤远方

第三方系统提供的高级数字签名不能用于创建有效的签名 PDFPAdES 签名始终封装在 PDF 文档中,因此签名服务不可能返回 DSS 认为有效的分离的 PAdES 签名。它可能将分离的 CAdES 或 XAdES 签名提供到可由 DSS 处理的 SOAP 消息中(DSS 提供高级 API 以使用 XAdES、CAdES、PAdES 和 aSiCS 格式对文档进行签名)。两种格式都支持嵌入 OCSP 响应,但也需要添加时间戳,这使得构建最终格式更加困难。这可能是在 SOAP 消息中使用自定义字段以返回 OCSP 响应的原因XAdES 和 PAdES 在概念上相似但在结构上不同。XAdES 签名是 XML,PAdES 是二进制。XML 签名无法转换为 PAdESPAdES 和 CAdES 使用 CMS,都是二进制的,它们使用 ASN.1 语法。但签名消息不同,CAdES 签名是在整个文档(以及一些其他属性)上计算的,PAdes 使用PDF 文档的某些数据。因此,cades 签名也无法转换为 PAdes。
随时随地看视频慕课网APP

相关分类

Java
我要回答