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)返回false,第二个为true。 Pdf由this示例中的方法签名(请参阅SignTest方法)。当我们第二次签名时,额外的第4个参数“append”被传递给此次调用:PdfStamper.CreateSignature(reader, os, '\0', true);
如何使SignatureCoversWholeDocument方法适用于所有签名?或者这是不可能的,我需要删除多个签名文件的检查?