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