我正在尝试使用 Apache 的 PDFBox Detached Signature 和用于加密签名本身的 BouncyCastle API 创建启用 LTV 的 PDF 签名。
到目前为止,我能够按照以下步骤使 Adobe Reader 显示“Signature is LTV enabled”消息:
检索签名证书的完整链和时间戳授权证书的完整链(用于在步骤 #4 中添加签名的时间戳)的撤销信息(CRL 和 OCSP 响应,当然根证书除外)
包括在步骤 #1 中检索到的撤销信息作为签名属性,以 Adobe OID“1.2.840.113583”格式计算:
adbe-revocationInfoArchival OBJECT IDENTIFIER ::= { adbe(1.2.840.113583) acrobat(1) security(1) 8 } RevocationInfoArchival ::= SEQUENCE { crl [0] EXPLICIT SEQUENCE of CRLs OPTIONAL, ocsp [1] EXPLICIT SEQUENCE of OCSP Responses OPTIONAL, otherRevInfo [2] EXPLICIT SEQUENCE of OtherRevInfo OPTIONAL } OtherRevInfo ::= SEQUENCE { Type OBJECT IDENTIFIER ValValue OCTET STRING }
执行签名
在第 3 步生成的签名中嵌入一个合格的时间戳
前面步骤的输出在 Adobe Reader 中为我提供了“LTV 已启用”状态:
当我检查 Adobe Reader 用于验证证书链有效性的数据时,它会显示预期的“所选证书被认为是有效的,因为它没有被撤销,因为它使用嵌入在签名中的在线证书状态协议 (OCSP) 响应进行了验证。 "
但是,当我对时间戳权威的证书链执行相同的检查时,它会显示“所选证书被认为是有效的,因为它没有被撤销,因为它没有被撤销,因为它使用在线获得的在线证书状态协议 (OCSP) 进行了实时验证。”
签名者的链嵌入式 CRL/OCSP 被成功使用,但嵌入式 TSA 的链 CRL/OCSP 没有成功使用。
这就引出了一些需要回答的问题:
- 为什么不使用 TSA 嵌入式 CRL/OCSP?
- 我必须将它们放在其他地方吗?如果有,在哪里?
- 或者我是否必须要求时间戳授权将 CRL 和/或 OCSP 响应作为时间戳令牌中的签名属性返回?