跳至页脚内容
产品比较

从 Aspose PDF 迁移到 IronPDF

"签名"在IronPDF中意味着三件不同的事情,它们不可互换:由证书支持的防篡改数字签名、一种手写图像的视觉印章,以及供用户稍后签名的交互式字段。 他们的安全属性不同,因此用例沿此线分裂。加密核心是PdfSignature类,它使用从.pfx.p12文件加载的X509Certificate2,并通过pdf.Sign(...)应用。 这样就将身份绑定到内容,因此任何后续编辑都会破坏签名。

防篡改合同和协议

大多数团队先会选择这一项。证书签名证明文档是自创且未更改,并让您嵌入审计跟踪(理由、位置、联系人、日期)和经过信任的时间戳:

using IronPdf;
using IronPdf.Signing;
using System;

var pdf = PdfDocument.FromFile("contract.pdf");
var signature = new PdfSignature("certificate.pfx", "password")
{
    SigningReason = "Contractual Agreement",
    SigningLocation = "Chicago, USA",
    SignatureDate = DateTime.Now,
    TimeStampUrl = new Uri("http://timestamp.digicert.com"),
    TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
};
pdf.Sign(signature);
pdf.SaveAs("contract-signed.pdf");
using IronPdf;
using IronPdf.Signing;
using System;

var pdf = PdfDocument.FromFile("contract.pdf");
var signature = new PdfSignature("certificate.pfx", "password")
{
    SigningReason = "Contractual Agreement",
    SigningLocation = "Chicago, USA",
    SignatureDate = DateTime.Now,
    TimeStampUrl = new Uri("http://timestamp.digicert.com"),
    TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
};
pdf.Sign(signature);
pdf.SaveAs("contract-signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports System

Dim pdf = PdfDocument.FromFile("contract.pdf")
Dim signature = New PdfSignature("certificate.pfx", "password") With {
    .SigningReason = "Contractual Agreement",
    .SigningLocation = "Chicago, USA",
    .SignatureDate = DateTime.Now,
    .TimeStampUrl = New Uri("http://timestamp.digicert.com"),
    .TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
}
pdf.Sign(signature)
pdf.SaveAs("contract-signed.pdf")
$vbLabelText   $csharpLabel

来自可信授权的时间戳提供了何时文档被签署的密码验据,独立于本地时钟——这对于注册和受管要求至关重要。

签署后锁定文档

SignaturePermissions设置控制之后允许的操作:NoChangesAllowed锁定文档,FormFillingAllowed仅允许字段输入,AnnotationsAndFormFillingAllowed还允许注释。 任何不允许的操作都会使签名失效,这适用于颁发证书、已批准的政策和确定的声明。

多方审批工作流

因为PDF支持增量保存,因此签名适用于特定修订。 每个批准者签署他们自己的,而历史记录会记录谁签署了什么、何时和变更的内容。 这涵盖了共同签署和顺序签署。

验证和审核把关

管道可以拒绝任何未能验证的文档,然后回滚或剥离签名:

var pdf = PdfDocument.FromFile("signed-report.pdf");
bool valid = pdf.VerifySignatures();

if (!valid)
{
    pdf.RemoveSignatures();
    pdf.SaveAs("report-unsigned.pdf");
}
var pdf = PdfDocument.FromFile("signed-report.pdf");
bool valid = pdf.VerifySignatures();

if (!valid)
{
    pdf.RemoveSignatures();
    pdf.SaveAs("report-unsigned.pdf");
}
Dim pdf = PdfDocument.FromFile("signed-report.pdf")
Dim valid As Boolean = pdf.VerifySignatures()

If Not valid Then
    pdf.RemoveSignatures()
    pdf.SaveAs("report-unsigned.pdf")
End If
$vbLabelText   $csharpLabel

没有加密的可见批准

当您只需要签名的外观,而不是法律上的不可否认性时,用印章或水印功能加盖扫描的手写图像。 只要您明确它是什么,对于内部的批准,这种方法很好。

用印章或证书,以及两个陷阱

永远不要让盖上去的签章代替证书签名。 印章是页面上的像素:可复制、不可验证,不能保证文档未被更改。 证书签名是防篡改的,并使用密码术绑定身份与内容。 用印章表示外观,而用证书作为证明。

有两件事让人们出其不意。 使用X509KeyStorageFlags.Exportable加载证书,否则无法使用私钥并且签名失败。 如果查看器显示警告而非绿色勾号,则说明证书不在该查看器的信任存储中; 签名仍然有效,但必须以其他方式建立信任。

常见问题解答

IronPDF中的三种PDF签署类型是什么?

IronPDF支持: (1) 由X.509证书支持的加密数字签名,将身份与内容绑定,并在篡改时失效; (2) 将手写签名图像放置在页面上的视觉图章,无需加密证明; (3) 用户稍后在PDF查看器中签署的交互签名字段。

如何在C#中向PDF添加篡改证明数字签名?

.pfx.p12文件加载X.509证书到PdfSignature对象中,设置签名原因、位置、日期,并可选择添加可信时间戳URL,然后调用pdf.Sign(signature)并保存。

PDF数字签名与视觉图章有什么区别?

数字签名以加密方式将证书身份与文档内容绑定——任何后续编辑都会破坏它。视觉图章只是页面上的一个图像:可复制、不可验证,且不保证文档未被更改。使用图章用于外观;使用证书进行法律证明。

为什么IronPDF无法签署,提示“私钥不可访问”?

使用X509KeyStorageFlags.Exportable标志加载X.509证书。没有它,私钥无法用于签名。

如何在IronPDF中验证和移除PDF上的签名?

调用pdf.VerifySignatures()检查所有签名是否有效。如果结果为假,调用pdf.RemoveSignatures()在重新处理或重新签署前移除它们。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我