PDF多重签名验证和AcroFields.SignatureCoversWholeDocument方法
Pdf multiple signatures validation and AcroFields.SignatureCoversWholeDocument method
pdf 签名验证代码:
public bool ValidateFileSignatures(Stream stream)
{
stream.Seek(0, SeekOrigin.Begin);
PdfReader reader = new PdfReader(stream);
AcroFields af = reader.AcroFields;
var names = af.GetSignatureNames();
if (names.Count == 0)
return false; // no signatures
foreach (string name in names)
{
if (!af.SignatureCoversWholeDocument(name))
{
return false;
}
PdfPKCS7 pk = af.VerifySignature(name);
X509Certificate[] pkc = pk.Certificates;
if (!pk.Verify())
{
return false;
}
}
return true;
}
当我们第一次签署文件时,一切正常。但是,如果文档签名两次,则有 2 个带签名的字段,其中第一个方法 af.SignatureCoversWholeDocument(name) returns false,第二个 - true。 Pdf 由 this 示例中的方法签名(参见 SignTest 方法)。当我们第二次签名时,额外的第 4 个参数 "append" 被传递给此调用:PdfStamper.CreateSignature(reader, os, '[=12=]', true);
如何使 SignatureCoversWholeDocument 方法适用于所有签名?或者这是不可能的,我需要取消对多个签名文档的检查?
第一次签名时,第一个签名覆盖整个文档。到目前为止一切顺利。
第二次签名时,第一次签名不再覆盖整个文档。这应该很容易理解:第一个签名不覆盖添加到文档的第二个签名,因此第一个签名不覆盖整个文档。只有第二个签名覆盖了整个文档。
你在解释一个不是问题的问题,只是你的误解。
看看这张图片:
第一个签名涵盖修订版 1,但不是整个文档。
第二个签名涵盖修订版 2。这包括修订版 1,但不包括整个文档。第三个签名涵盖了修订版 3,包括修订版 1 和修订版 2。它也涵盖了整个文档。
这就是数字签名在 PDF 中的工作方式。如果您需要更多信息,请阅读 ISO-32000-1 或 PAdES 标准。
pdf 签名验证代码:
public bool ValidateFileSignatures(Stream stream)
{
stream.Seek(0, SeekOrigin.Begin);
PdfReader reader = new PdfReader(stream);
AcroFields af = reader.AcroFields;
var names = af.GetSignatureNames();
if (names.Count == 0)
return false; // no signatures
foreach (string name in names)
{
if (!af.SignatureCoversWholeDocument(name))
{
return false;
}
PdfPKCS7 pk = af.VerifySignature(name);
X509Certificate[] pkc = pk.Certificates;
if (!pk.Verify())
{
return false;
}
}
return true;
}
当我们第一次签署文件时,一切正常。但是,如果文档签名两次,则有 2 个带签名的字段,其中第一个方法 af.SignatureCoversWholeDocument(name) returns false,第二个 - true。 Pdf 由 this 示例中的方法签名(参见 SignTest 方法)。当我们第二次签名时,额外的第 4 个参数 "append" 被传递给此调用:PdfStamper.CreateSignature(reader, os, '[=12=]', true);
如何使 SignatureCoversWholeDocument 方法适用于所有签名?或者这是不可能的,我需要取消对多个签名文档的检查?
第一次签名时,第一个签名覆盖整个文档。到目前为止一切顺利。
第二次签名时,第一次签名不再覆盖整个文档。这应该很容易理解:第一个签名不覆盖添加到文档的第二个签名,因此第一个签名不覆盖整个文档。只有第二个签名覆盖了整个文档。
你在解释一个不是问题的问题,只是你的误解。
看看这张图片:
第一个签名涵盖修订版 1,但不是整个文档。 第二个签名涵盖修订版 2。这包括修订版 1,但不包括整个文档。第三个签名涵盖了修订版 3,包括修订版 1 和修订版 2。它也涵盖了整个文档。
这就是数字签名在 PDF 中的工作方式。如果您需要更多信息,请阅读 ISO-32000-1 或 PAdES 标准。