数字签名在 Adob​​e reader 中不可见,但在 Foxit reader 中可见

Digital signature not visible in Adobe reader but visible in Foxit reader

我正在使用这个库 https://github.com/vbuch/node-signpdf 来签署 pdf 文档。签署文档后,当我使用 Foxit reader 打开 pdf 时可以看到签名,但当我使用 Adob​​e reader DC 打开它时看不到签名。我也试过 Adob​​e reader XI,但我也看不到它。 当我在 pdf xchange 查看器中打开文档时出现此错误:non critical errors detected in the xref table.

知道问题出在哪里吗?

这是我签名的文件:https://drive.google.com/file/d/1AZvS4sP2Y3FwW4Deod87Dgxc9I0QZkoc/view?usp=sharing

在您的示例 PDF 中,签名字段的名称由 10 个字节组成,其中 9 个字节的值为 0x00,1 个字节的值为 0x01。显然 Adob​​e Reader 不喜欢该字段名称。

经过一些实验,Adobe Reader 似乎不喜欢以 0x00 字节开头的字段名称。

也许它包含一些代码,以 c'ish 方式确定字符串长度并将 0x00 解释为 end-of-string。因此,具有前导 0x00 字节的字段名称被解释为空字符串,Adobe Reader 也不接受该字段名称。

因此,请使用由(特别是开头)一些有意义的字符组成的签名字段名称。由于验证器通常会显示签名字段的名称,无论如何这是个好主意。


就低级 PDF 对象而言:

签名字段对象如下所示:

18 0 obj
<<
/Type /Annot
/Subtype /Widget
/FT /Sig
/Rect [0 0 0 0]
/V 17 0 R
/T (         )
/F 4
/P 1 0 R
>>
endobj 

但只有这样,T条目的字符串值实际上包含了上面提到的9个0x00字节和1个0x01字节。这是必须更改为不以 0x00 开头的 non-empty 字符串的值。我建议根本不使用字节 < 0x20。此外,名称中不得使用点 0x2e,它保留用于分隔部分名称。