我试图从文档和源代码中找出Esig DSS java套件时感到困惑。 (eu.europa.esig.dss.* tree(
我们连接到瑞典银行ID以签署PDF和简单的纯文本。 响应是一个 SOAP XML,其中包含签名字段和 OCSP 响应。
最终目标是将这两个部分组合成一个可以嵌入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);
我可以从对象中打印出各种信息,查找嵌入式证书等,因此格式似乎是合法的。
问题: 如何从外部资源OCSPSource获取有效的OCSPToken?
我一直在兜圈子,试图将两者合并成一个高级签名(如果这是我可以用来嵌入PDF的内容(。
第三方系统提供的高级数字签名不能用于创建有效的签名 PDF
PAdES 签名始终封装在 PDF 文档中,因此签名服务不可能返回 DSS 认为有效的分离 PAdES 签名。
它可能在 SOAP 消息中提供了一个分离的 CAdES 或 XAdES 签名,该签名可以由 DSS 处理(DSS 提供了一个高级 API 来使用 XAdES、CAdES、PAdES 和 aSiCS 格式对文档进行签名(。
这两种格式都支持嵌入 OCSP 响应,但它也需要添加时间戳,这使得构建最终格式变得更加困难。这可能是在 SOAP 消息中使用自定义字段来返回 OCSP 响应的原因
XAdES 和 PAdES 在概念上相似,但在结构上不同。XAdES 签名是 XML,PAdES 是二进制的。XML 签名无法转换为 PAdES
PAdES和CAdES使用CMS,两者都是二进制的,它们使用ASN.1语法。但是签名消息是不同的,CAdES 签名是在整个文档(以及某些属性(上计算的,PAdes 使用 PDF 文档的某些数据。因此,CADES 签名也无法转换为 PAdes。