安全性和签名

安全性和签名

Aspose.PDF FOSS for .NET 支持 PDF 数字签名、基于证书的加密和自定义安全处理程序。使用 PdfSigner 进行签名工作流,使用 PdfCertificate 进行证书管理。


签署文档

PdfSigner 使用 PFX 证书对 PDF 添加数字签名。

var cert = PdfCertificate.FromPfx("certificate.pfx", "password");
var signer = new PdfSigner();
signer.Sign(doc, cert);
doc.Save("signed.pdf");

验证签名

var signer = new PdfSigner();
bool valid = signer.Verify(doc);
Console.WriteLine($"Signature valid: {valid}");

带有可视外观的签名

signer.SignWithAppearance(doc, cert, signatureField, appearance);

证书管理

PdfCertificate 从 PFX 文件或 DER 编码的文件加载证书。

// From PFX
var cert = PdfCertificate.FromPfx("cert.pfx", "password");

// From DER files (certificate + key)
var cert2 = PdfCertificate.FromDerFiles("cert.der", "key.der");

基于证书的加密

CertificateEncryptionOptions 对 PDF 进行加密,使只有指定的证书持有者才能打开它。

var options = new CertificateEncryptionOptions(cert);

自定义安全处理程序

实现 ICustomSecurityHandler 用于自定义加密和解密逻辑。

public class MyHandler : ICustomSecurityHandler
{
    public void Initialize(EncryptionParameters parameters) { }
    public byte[] CalculateEncryptionKey() { /* ... */ return Array.Empty<byte>(); }
    public byte[] GetUserKey() { /* ... */ return Array.Empty<byte>(); }
    public byte[] GetOwnerKey() { /* ... */ return Array.Empty<byte>(); }
    public bool IsOwnerPassword(string password) { /* ... */ return false; }
    public bool IsUserPassword(string password) { /* ... */ return false; }
}

签名算法信息

SignatureAlgorithmInfo 描述了现有签名中使用的算法。

var info = new SignatureAlgorithmInfo("SHA256withRSA");
Console.WriteLine(info.ToString());

技巧与最佳实践

  • 始终在最后一步签署文档——签署后进行的任何修改都会使签名失效。
  • 使用带有强密码的 PFX 文件存储证书。
  • 加载文档后验证签名以检测篡改。
  • 基于证书的加密需要接收方的公钥证书。
  • 仅在标准加密不足时实现 ICustomSecurityHandler

常见问题

问题原因解决方案
签名显示为无效文档在签名后被修改在完成所有修改后重新签名
PFX 加载失败密码错误或文件损坏验证密码和文件完整性
加密导致无法打开未提供所有者密码使用正确的所有者或用户密码

常见问题

支持哪些签名算法?

RSA 与 SHA-256、SHA-384 和 SHA-512 通常受支持。可用的算法取决于证书的密钥类型。

我可以添加多个签名吗?

是的。每个签名都应用于文档中的单独签名字段。

签名是否需要商业证书?

不。自签名证书可用于测试。对于生产环境,请使用 受信任的 CA 颁发的证书。


API 参考摘要

Class / MethodDescription
PdfSigner对 PDF 文档进行签名和验证
PdfSigner.Sign应用数字签名
PdfSigner.Verify检查签名有效性
PdfSigner.SignWithAppearance使用可视签名字段进行签名
PdfCertificate用于 PFX 和 DER 格式的证书加载器
PdfCertificate.FromPfx从带密码的 PFX 文件加载
PdfCertificate.FromDerFiles从 DER 编码文件加载
CertificateEncryptionOptions基于证书的 PDF 加密
ICustomSecurityHandler自定义加密/解密的接口
EncryptionParameters传递给自定义安全处理程序的参数
SignatureAlgorithmInfo关于签名算法的元数据

另请参阅

 中文