介绍
将 timestamped digital signature 添加到 PDF 不仅可以证明作者身份,还能保证签名在特定时间点存在。这对于需要展示文档长期有效性的法律、金融和合规场景至关重要。在本教程中,我们将展示如何在 C# 中使用 Aspose.PDF for .NET 实现时间戳签名。焦点关键词 timestamped digital signatures 早期出现,以向搜索引擎和开发者表明本文的相关性。
为什么带时间戳的数字签名很重要
常规的数字签名将文档绑定到证书,但证书的有效性可能会变化——证书会过期、被吊销,或签署机构可能被泄露。Timestamp Authority (TSA) 在签名中注入可信的时间戳,生成不可变的证明,表明文档在任何潜在证书问题出现之前已被签署。此举可防止未来的争议,并满足 eIDAS 和美国 ESIGN Act 等法规。通过嵌入 TSA 提供的时间戳,您可以在证书更改时无需重新签署,即可为 PDF 进行未来防护。
为什么使用 Aspose.PDF for .NET
Aspose.PDF for .NET 是一个强大的库,能够在不需要 Adobe Acrobat 的情况下创建、操作和签署 PDF 文件。要开始使用,请通过 NuGet 安装该库:
Install-Package Aspose.PDF
安装后,您可以在 Aspose.PDF product page 上参考 API 文档,以获取详细的类描述。我们将使用的关键类如下:
Aspose.Pdf.Document– 表示 PDF 文档。Aspose.Pdf.Facades.PdfFileSignature– 提供签名功能。Aspose.Pdf.Forms.PKCS7– 封装基于证书的签名。Aspose.Pdf.TimestampSettings– 保存 TSA URL 和凭据。System.Drawing.Rectangle– 定义签名在页面上的可视区域。
逐步教程:添加带时间戳的数字签名
1. 准备环境并加载 PDF
- 创建一个新的 C# 控制台或 Windows 项目。
- 确保已引用 NuGet 包。
- 将要签名的 PDF 放在已知文件夹中(例如
Data目录)。 - 安全地存储您的签名证书(
.pfx)和密码。
以下示例演示如何使用 C# 和 Aspose.PDF 为 PDF 添加带时间戳的数字签名。
// Load a PDF document from the file system
string dataDir = "./Data/"; // Adjust the path to your data folder
string pdfPath = Path.Combine(dataDir, "SimpleResume.pdf");
using (var document = new Aspose.Pdf.Document(pdfPath))
{
// PDF is now loaded and ready for signing
// Further steps will be performed inside this using block
}
说明:
dataDir指向包含输入文件的文件夹。Aspose.Pdf.Document在一次性上下文中打开 PDF,确保资源被释放。
2. 创建 PKCS#7 签名对象并配置时间戳
- 加载您的
.pfx文件和密码。 - 使用这些凭据实例化
PKCS7。 - 创建一个指向公开可访问的 TSA 端点的
TimestampSettings对象(例如 https://freetsa.org/tsr)。如果不需要身份验证,可以将第二个参数留空。 - 将
TimestampSettings分配给PKCS7实例。
以下示例演示如何使用 C# 配置带有 TSA 服务器的 PKCS#7 签名。
string pfxPath = Path.Combine(dataDir, "myCertificate.pfx");
string pfxPassword = "myPassword"; // Keep this secure!
// Create the PKCS#7 signature object using the certificate
var pkcs = new Aspose.Pdf.Forms.PKCS7(pfxPath, pfxPassword);
// Configure timestamp settings – replace URL with your TSA if needed
var timestampSettings = new Aspose.Pdf.TimestampSettings("https://freetsa.org/tsr", string.Empty);
pkcs.TimestampSettings = timestampSettings;
说明:
PKCS7封装了进行加密签名所需的证书和私钥。TimestampSettings告诉 Aspose.PDF 在签名过程中从指定的 TSA URL 请求时间戳。- 将
TimestampSettings分配给PKCS7实例后,使用此对象创建的每个签名都将包含 TSA 提供的时间。
3. 定义签名的视觉外观
PDF 签名可以具有可见的表示(签名字段)或是不可见的。这里我们将在第 1 页上创建一个可见的矩形:
以下示例演示如何在首页上定义签名矩形。
// Define a rectangle where the signature will appear (in points)
var rect = new System.Drawing.Rectangle(100, 100, 200, 100); // x, y, width, height
说明:
- 矩形的坐标使用 PDF 点系统(1 点 = 1/72 英寸)。
- 调整
x和y以在页面上将签名字段放置在所需位置。
4. 将签名应用于文档
- 实例化
PdfFileSignature并加载Document。 - 使用页面编号、原因、联系人、位置、指示签名是否可见的布尔值、矩形以及
PKCS7对象调用Sign。 - 最后,使用
PdfFileSignature.Save保存已签名的文档。
以下示例演示如何使用 C# 应用时间戳签名并保存 PDF。
using (var signature = new Aspose.Pdf.Facades.PdfFileSignature(document))
{
// Sign page 1 with the configured PKCS7 (which includes timestamp settings)
signature.Sign(
pageNumber: 1,
reason: "Approved by HR",
contact: "hr@example.com",
location: "New York, USA",
visible: true,
rect: rect,
pkcs: pkcs);
// Save the signed PDF to the output path
string outputPath = Path.Combine(dataDir, "DigitallySignWithTimeStamp_out.pdf");
signature.Save(outputPath);
}
说明:
PdfFileSignature.Sign在选定的页面上创建基于证书的签名。reason、contact和location是可选的元数据字段,显示在签名属性中。- 将
visible设置为true会使签名出现在我们之前定义的矩形区域内。 - 因为已设置
pkcs.TimestampSettings,Aspose.PDF 在签名过程中会联系 TSA(https://freetsa.org/tsr),并将返回的时间戳令牌嵌入签名中。 - 已签名的文件写入
DigitallySignWithTimeStamp_out.pdf。
5. 验证签名和时间戳(可选)
签名完成后,您可以在 Adobe Acrobat Reader 或任何支持签名验证的 PDF 查看器中打开生成的 PDF。导航到签名面板;您应该能看到时间戳来源(例如 “freetsa.org”)以及签名应用的确切时间。此步骤确认 TSA 交互成功,且签名在密码学上是可靠的并已加上时间戳。
获取免费许可证
Aspose 提供临时评估许可证,可去除评估水印,让您探索所有功能,包括时间戳签名。立即在 临时许可证页面 获取。
免费附加资源
- 文档 – 可在 Aspose.PDF for .NET docs 获取全面的指南和 API 使用示例。
- API 参考 – 可在 API reference 查看详细的方法签名和类层次结构。
- 免费在线应用 – 使用 Aspose Apps 的免费网络应用,无需编写代码即可尝试 PDF 签名。
结论
带时间戳的数字签名提供可靠的签署时间证明,能够在证书过期和撤销后仍然有效。使用 Aspose.PDF for .NET,您可以快速集成支持 TSA 的基于证书的签名,定义可视签名区域,并生成符合标准的 PDF,适合长期归档。上述分步指南从安装到代码执行全程指引,帮助您以编程方式保护 PDF 文档的安全。
常见问题
什么是时间戳授权机构(TSA),以及我为何需要它? TSA 提供可信的时间标记,证明签名在特定时刻存在,这对于在签名证书过期或被撤销时进行长期验证至关重要。
我可以使用任何 .pfx 证书进行签名吗? 是的,任何包含私钥和相应证书的有效 PKCS#12(.pfx)文件都可以使用,只要该证书被验证 PDF 的各方信任。
时间戳会影响签名的视觉外观吗? 不会。时间戳嵌入在签名的加密数据中,而视觉外观(您定义的矩形)保持不变。
如何验证时间戳已成功应用? 在支持签名验证的 PDF 查看器中打开已签名的 PDF(例如 Adobe Acrobat)。签名属性将显示时间戳的来源和时间。
是否可以使用相同的时间戳签名对多个页面进行签名?
是的。您可以对每个需要签名的页面调用PdfFileSignature.Sign,并复用具有相同 TimestampSettings 的 PKCS#7 对象。我需要付费许可证才能使用 TimestampSettings 吗?
TimestampSettings 在 Aspose.PDF 的完整功能集中可用。您可以通过从 Aspose 网站获取的临时许可证进行评估。
