Java 如何使用脱机签名和OCSP响应创建PADE

Java 如何使用脱机签名和OCSP响应创建PADE,java,digital-signature,ocsp,pades,Java,Digital Signature,Ocsp,Pades,我在试图从文档和源代码中找出Esig DSS java套件时被难住了。 (eu.europa.esig.dss.*树) 我们连接到瑞典银行ID以签署PDF和简单的纯文本。 响应是一个SOAP XML,带有签名字段和OCSP响应 最终目标是将这两部分组合成一个对象“有效签名”,可以嵌入到PDF中(使用DSS和PDFbox) BankID Soap字段的内容似乎具有DSS工具的正确格式: 签名可以加载为 DSSDocument sigDoc = new InMemoryDocument(xmlSig

我在试图从文档和源代码中找出Esig DSS java套件时被难住了。 (eu.europa.esig.dss.*树)

我们连接到瑞典银行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);
我可以从对象中打印出各种信息,查找嵌入的证书等,因此格式似乎是合法的

问题: 如何从ExternalResourcesOCSPSource获取有效的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签名无法转换为PADE


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

谢谢,它很好地回答了标题!(续)谢谢,它很好地回答了标题!文本开始询问签名和ocsp的组合,这似乎是任何事情的先决条件。无论如何,我们也可以选择发送隐藏的消息摘要,并用BankID签名。你认为这也不行吗?如果我们从PDF创建摘要,签名值不能匹配真实PAdES中的PDF字节吗?否则,我们将尝试使用嵌入式XADE,但这可能会解决许多不同的问题。对PDF和要签名的属性进行摘要,在BankId中对其进行外部签名,然后编写结果文档是可行的。事实上,DSSAPI的签名过程是这样工作的,因此您可以直接使用它而无需进行修改。但BankID必须生成基本签名PKCS#1,而不是高级签名(高级签名格式包括PKCS#1签名,但要签名的摘要会重新计算,因此您无法提取和重用它)。我建议你和服务提供商谈谈,看看你是否有权再次回复,这有助于我们的调查!