ETSI.CAdES.detached与adbe.pkcs7.detached PDF签名技术问询
ETSI.CAdES.detached PDF签名实现相关问题解答
一、四项核心修改的合规必要性
这四项均为ETSI EN 319 142-1规范下的合规必要项:
- /SubFilter值:必须改为
ETSI.CAdES.detached,这是PDF标识签名类型的核心字段,是区分CAdES与传统PKCS#7签名的关键依据。 - DSS结构:需采用符合ETSI TS 102 778标准的Document Security Store,用于统一存储签名验证所需的证书、CRL、OCSP响应等材料,替代adbe模式下的LTV存储逻辑,是CAdES签名合规性的基础。
- ESS属性:必须添加Enhanced Security Services相关属性(如
id-ess-signing-certificate-v2、id-ess-revocation-refs等),这类属性属于签名的已认证部分,用于明确签名依赖的证书链、吊销状态,是CAdES签名完整性与可追溯性的核心要求。 - Document-Time-Stamp(DTS):需在签名后添加文档时间戳,固化签名时刻的文档状态与验证材料有效性,是ETSI规范中保障长期有效性的强制要求。
二、长期有效性对比
若四项修改均合规实现,ETSI.CAdES.detached签名的长期有效性不弱于adbe.pkcs7.detached签名,甚至在标准化程度上更严谨:ETSI的DSS与DTS机制是专门针对长期验证设计的体系,只要按规范维护,可确保签名在证书过期后仍能被有效验证,其长期有效性的保障逻辑更清晰、更符合国际标准化要求。
三、ETSI需重盖时间戳而adbe模式无需的原因及规避方法
原因
adbe.pkcs7.detached的LTV模式逻辑是一次性嵌入所有验证材料,只要嵌入的CRL/OCSP在验证时未过期,即可完成签名验证;但该模式未强制要求后续维护,若嵌入的吊销信息过期,签名的长期有效性也会失效。
而ETSI EN 319 142-1的CAdES规范要求周期性用时间戳固化验证材料状态:当原始吊销信息过期后,时间戳可证明某一时刻这些材料是有效的,从而延续签名的长期可验证性——这是ETSI对长期有效性的标准化保障机制,而非adbe模式的“被动依赖嵌入材料有效期”。
规避方法
- 嵌入长期归档型吊销信息:使用CA提供的归档CRL/OCSP(部分CA支持生成带有长期有效性标记的吊销响应),或符合ETSI TS 102 231标准的SCVP验证响应,减少吊销信息过期的影响。
- 初始签名时添加覆盖型归档时间戳:在完成签名并嵌入所有验证材料后,立即添加一个覆盖整个签名域及验证材料的归档时间戳,将签名状态永久固化在时间点上,后续只要时间戳CA的根证书有效,无需重复操作。
四、ESS属性在SignedData结构中的构建方式
ESS属性属于SignedData中SignerInfo的authenticatedAttributes(已认证属性)部分,构建步骤如下:
- 确定核心ESS属性类型:
id-ess-signing-certificate-v2:存储签名证书的哈希值与标识信息,用于明确签名主体。id-ess-certificate-refs:列出签名依赖的所有证书的哈希值、Issuer/Serial信息,构建完整证书链追溯关系。id-ess-revocation-refs:绑定对应证书的CRL/OCSP响应哈希值,证明签名时刻的吊销状态。
- 按ASN.1编码规则将属性封装为
Attribute结构,添加到SignerInfo的authenticatedAttributes中,确保属性值被包含在签名哈希计算范围内(即属性内容会被私钥签名,不可篡改)。 - 注意属性顺序:ETSI规范要求
id-ess-signing-certificate-v2需放在已认证属性的靠前位置,避免验证时出现兼容性问题。
五、SignedData结构的其他变更
除ESS属性外,还有以下关键调整:
- 签名算法OID:需使用符合ETSI规范的算法标识,例如SHA256withRSA对应OID为
1.2.840.113549.1.1.11,需与ESS属性中的哈希算法保持一致。 - 未认证属性扩展:文档时间戳会作为
UnsignedAttributes添加到SignerInfo中,或作为独立的签名域嵌入PDF。 - 归档属性支持:可添加
id-aa-ets-archiveTimestampV3等归档时间戳属性,进一步强化长期有效性的保障。
六、PDFBox和BouncyCastle的支持情况
- BouncyCastle:完全支持ETSI CAdES规范,提供了
ESSCertIDv2、CMSSignedDataGenerator等工具类,可直接构建包含ESS属性的SignedData结构,同时支持时间戳的生成与嵌入。 - PDFBox:需手动扩展实现部分逻辑:
- 可通过
PDSignature.setSubFilter("ETSI.CAdES.detached")直接设置签名类型标识。 - DSS结构可通过
PDDocumentSecurityStore类构建,PDFBox提供了添加证书、CRL、OCSP条目的API,需按ETSI规范组织内容。 - 结合BouncyCastle生成的CAdES SignedData,嵌入到PDFBox创建的签名域中即可完成完整实现。
- 可通过
内容的提问来源于stack exchange,提问作者F.C.
相关产品推荐
相关产品推荐

