You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用DSS 6.0生成仅含OCSP不含CRL的LTV PDF签名?

DSS 6.0 OCSP嵌入与LTV签名问题解答

问题背景

我正在使用DSS 6.0,依赖配置如下:

<dependency>
    <groupId>eu.europa.ec.joinup.sd-dss</groupId>
    <artifactId>dss-pades</artifactId>
    <version>6.0</version>
</dependency>

此前成功生成带LTV的PDF签名,但1KB的PDF变为7MB,经排查是因嵌入了CRL。现决定仅使用OCSP而非CRL,为此做了两处修改:设置certificateVerifier.setCrlSource(null);,并添加certificateVerifier.setAlertOnMissingRevocationData(new LogOnStatusAlert(Level.WARN));避免异常。但签名后的文档有效却不具备LTV属性。

我通过重写OnlineOCSPSource的方法验证,DSS 6.0已调用OCSP接口并获取到响应,且尝试了PAdES_BASELINE_LT和PAdES_BASELINE_LTA两种模式,问题仍存在。

现咨询:

  1. 如何让DSS 6.0显式嵌入OCSP响应?
  2. 生成LTV签名是否需要同时存储OCSP和CRL,还是只需其中一种?

问题解答

1. 显式嵌入OCSP响应的操作步骤

仅清空CRL源还不够,需要从签名参数和验证器配置两方面调整,确保OCSP响应被纳入LTV存储:

  • 配置签名参数的吊销策略:明确指定仅使用OCSP获取吊销数据,并启用LTV模式
PAdESSignatureParameters signatureParams = new PAdESSignatureParameters();
signatureParams.setSignatureLevel(PAdESSignatureLevel.PAdES_BASELINE_LT);
// 强制仅加载OCSP吊销数据
signatureParams.setRevocationDataLoadingStrategy(RevocationDataLoadingStrategy.OCSP_ONLY);
  • 确保OCSP源被正确绑定到验证器:不要依赖默认OCSP配置,手动初始化并绑定OnlineOCSPSource
OnlineOCSPSource customOcspSource = new OnlineOCSPSource();
// 可根据需求配置OCSP请求超时、代理等参数
CommonCertificateVerifier certVerifier = new CommonCertificateVerifier();
certVerifier.setOcspSource(customOcspSource);
certVerifier.setCrlSource(null);
certVerifier.setAlertOnMissingRevocationData(new LogOnStatusAlert(Level.WARN));
  • 确认签名流程完整:确保签名时使用的PAdESService正确关联了上述验证器和参数,没有跳过LTV数据嵌入的步骤。

2. LTV签名对吊销数据的要求

不需要同时存储OCSP和CRL,只要有能有效验证签名证书吊销状态的其中一种数据即可。LTV的核心是把签名验证所需的离线验证数据嵌入PDF,只要OCSP响应有效、覆盖了签名证书的吊销状态,单独嵌入OCSP完全可以生成符合标准的LTV签名。


内容的提问来源于stack exchange,提问作者Shahid Ghafoor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 18:42:16