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

时间:2018-09-11 12:09:56

标签: java digital-signature ocsp pades

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

我们连接到Swedish BankID来签署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?

我一直围着圈子试图将两者合并为一个AdvancedSignature(如果可以将其嵌入到PDF中)。

1 个答案:

答案 0 :(得分:0)

第三方系统提供的高级数字签名不能用于创建有效的签名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。