全面的方法论始于将签名管道与验证管道分开,以孤立缺陷域。测试人员必须使用OpenSSL命令行工具执行密码验证,以确认CMS(加密消息语法)结构的完整性,而不依赖于PDF查看器。视觉回归测试应捕捉签名外观组件在Adobe Acrobat、Firefox PDF.js、Chrome PDFium和移动iOS PDFKit渲染器中的表现,以检测坐标系统的误解。时间验证需要操纵系统时钟,以证书过期后的日期来验证PAdES-LTV链条保持有效性,尽管嵌入了OCSP响应和TSA令牌。
在一家法律科技公司,我们部署了一个使用来自一家eIDAS合规信任服务提供者的ECDSA P-256证书的合同执行平台。关键缺陷在于,当在macOS上签署的文档在Preview和Adobe Acrobat中显示有效签名时,Chrome的本地PDF.js查看器却报告“签名有效性未知”,尽管该文件结构中嵌入了OCSP响应。
我们评估了三种不同的补救方法。第一种方法涉及迁移到RSA 2048加密密钥,这为旧的PDF解析器提供了更广泛的向后兼容性,但这使签名字节大小增加了大约百分之四十,并且显著降低在计算资源有限的移动设备上的性能。第二种方法考虑禁用LTV嵌入,以简化文档结构并减少解析复杂性,但这将导致签名在证书过期后失效,违反法律背景下十年文档保留期的监管要求。第三种方法专注于重构DSS(文档安全存储)字典,将OCSP响应数组放置在文件线性化中的ByteRange引用之前,这满足了PDF.js的线性解析要求,而不增加文件大小或妥协耐久性,尽管这需要复杂的低级PDF对象操作。
我们选择了第三种解决方案,因为PDF.js严格执行线性解析顺序要求,而Adobe Acrobat采用了更宽松的随机访问解析模型。该实现解决了跨平台有效性差异,实现了所有目标平台上的一致“签名有效”指示,同时保持严格的PDF/A-3合规性和PAdES-LTV的耐久性,以满足长期存档合规要求。
PDF/A合规级别如何影响数字签名的可见性和验证机制?
许多测试人员错误地将PDF/A合规性视为二元状态,而不是分级规格。PDF/A-1b确保仅视觉可重现性,而PDF/A-2a则要求标记结构和Unicode字符映射。在签名创建过程中,外观流必须使用文档的DA(默认外观)字符串中嵌入的字体。如果签名服务注入了原始文档字体子集不包含的系统字体,PDF/A验证将在签名后失败,即使加密签名本身在数学上仍然有效。测试人员必须验证在签名组件生成过程中是否进行了字体子集操作,并且**/DR**(默认资源)字典仅引用以前嵌入的字体流,而不是系统字体名称。
为什么嵌入的OCSP响应有时无法确认LTV(长期验证)状态,尽管在加密上是正确的?
候选人通常仅验证DSS字典中是否存在OCSP响应字节,而未检查验证链的完整性。LTV的建立需要完整的信任锚链,包括OCSP响应者证书、时间戳令牌和时间戳机构证书。如果OCSP响应是用需要自身撤销检查的证书签名的,但缺少嵌入的Certs数组中响应者的OCSP响应,Adobe Acrobat将拒绝启用LTV模式。测试人员必须确认DSS中的Certs数组包括所有中间证书,直到但不包括根CA,并且每个时间戳都覆盖签名和OCSP响应,以达到PAdES-T级别的合规最低要求。
是什么导致Adobe Acrobat与移动PDF查看器之间签名外观不对齐?
定义签名组件定位的Rect(矩形)数组使用页面坐标系统,而不同的查看器会以不同的方式解释。Adobe Acrobat从左下角原点计算坐标(标准PDF坐标空间),而某些移动查看器,如iOS PDFKit,在存在Rotate条目时沿顶部左侧原点执行CropBox计算。如果签名组件使用负坐标或超出MediaBox边界,桌面查看器可能会以与移动实现不同的方式剪裁外观。测试人员必须验证坐标是否符合CropBox和ArtBox边界,并确认页面字典中的Rotation条目被遵循,采用变换矩阵调整外观XObject,而不仅仅是调整组件矩形坐标。