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

标签 java digital-signature ocsp pades

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

我们连接到 Swedish BankID 以签署 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 中的东西)。

最佳答案

第三方系统提供的高级数字签名不能用于创建有效的签名 PDF

PAdES 签名始终包含在 PDF 文档中,因此签名服务不可能返回 DSS 认为有效的分离 PAdES 签名。

它可能在 DSS 可以处理的 SOAP 消息中提供分离的 CAdES 或 XAdES 签名(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。

关于java - 如何使用离线签名和 OCSP 响应创建 PADES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52275630/

相关文章:

java - 使用 iText 5 的证书和私钥签署 PDF 文档

c++ - 如何在 C++ 中使用 openssl 创建 ocsp 请求?

ssl - 使用 OCSP 装订 2 在客户端程序中检查 OpenSSL 证书吊销

ssl - OCSP 查询没有颁发者证书的中间证书

java - Windows Server 2008 Web Edition 配置让网站看到图像文件

java - 在特定时间后调用 onNext 后发出一个值

java - 关于setMnemonic的一些问题

php - 使用 ECDSA P-256 SHA-256 使用 PHP 创建 JWT

java - JPA:数据库生成的列

c++ - C++ 中的数字证书解析库?