java PDFBox签名文档防止修改

v8wbuo2f  于 2023-05-27  发布在  Java
关注(0)|答案(1)|浏览(254)

我正在使用.p12证书(成功)签署PDF。
问题是,签署PDF后,文件无法再修改
我知道对PDF的任何修改都会破坏签名,但我仍然希望允许修改,以便客户端可以进行修改和编辑文本。
以下是我的有效签名的最小复制(我从Apache PDfBox的CreateSignature示例开始):

public void signDetached(PDDocument document, OutputStream output)
            throws IOException {
        PDSignature signature = new PDSignature();
        signature.setFilter(PDSignature.FILTER_ADOBE_PPKLITE);
        signature.setSubFilter(PDSignature.SUBFILTER_ADBE_PKCS7_DETACHED);
        signature.setName("Testing User");
        signature.setLocation("Los Angeles, CA");
        signature.setReason("Testing");
        signature.setSignDate(Calendar.getInstance());
        document.addSignature(signature, this);
        document.saveIncremental(output);
    }

这段代码向PDF添加了一个数字签名字典,但它似乎没有创建允许对文档进行进一步修改的批准签名。
我做错了什么?是否可以使用Apache PDFBox创建一个不可见的批准签名,允许修改并在修改发生时失效?
提前感谢您提供的任何帮助或见解!

fslejnso

fslejnso1#

这段代码向PDF添加了一个数字签名字典,但它似乎没有创建允许对文档进行进一步修改的批准签名。
以下是您的基本误解,* 批准签名允许进一步修改 *。
诚然,PDF规范没有提到如果只有批准签名,则允许更改的限制。另一方面,Adobe Acrobat多年来一直对此类文档施加限制,这些限制与具有MDPP值为3的认证签名的文档几乎相同,参见。this answer。此外,Adobe Acrobat确实强制执行这一点,它不允许其用户将其认为不允许的更改应用于PDF。
因此,
我知道对PDF的任何修改都会破坏签名,但我仍然希望允许修改,以便客户端可以进行修改和编辑文本。
Adobe Acrobat不支持此功能。其他PDF编辑器可能支持或不支持不允许的签名PDF操作。

相关问题