数字签名

数字签名

Aspose.Words FOSS for .NET 可以检查并验证已经附加到 a .docx 文档通过 the Aspose.Words.DigitalSignatures 命名空间。此版本涵盖签名 verification — 读取签名元数据、检查有效性并检查签名证书。它不包括在文档上创建新签名的功能。


从文档读取签名

每个 Document 都公开一个 DigitalSignatures 属性,返回一个 DigitalSignatureCollection —— 一个只读、可枚举的 DigitalSignature 对象集合,这些对象已经存在于已加载的文件中。DigitalSignatureUtil.LoadSignatures(fileName)(以及 LoadSignatures(stream) 重载)直接从文件或流读取签名,而无需将完整文档加载到 Document 对象中,这在仅需检查签名状态时非常有用。集合的 IsValid 属性报告其包含的每个签名是否有效,Count 报告找到的签名数量。


检查单个签名

每个 DigitalSignature 都公开 IsValid(签名是否在密码学上有效),SignatureType(一个 DigitalSignatureType 值 —— CryptoApi、XmlDsig 或 Unknown),SignTime,Comments,SubjectName,IssuerName,以及原始的 SignatureValue 字节。CertificateHolder 属性返回一个包装签名证书的 CertificateHolder 对象;其 Certificate 属性公开底层的 X509Certificate2,以便您使用 .NET 自己的证书 API 检查标准证书字段(颁发者、主体、有效期)。


此版本不支持的功能

在 API 表面仍然声明签名相关成员 — DigitalSignatureUtil.Sign(), SignOptions,以及 XmlDsigLevel — 为了与商业版 Aspose.Words for .NET 对象模型的结构兼容性,但在此 FOSS 版本中在文档上创建新数字签名不可用。使用此版本来 verify 处理文档中已存在的签名;签名工作流需要 Aspose.Words 用于 .NET.


提示与最佳实践

  • 当仅需检查文件是否已签名时,优先使用 DigitalSignatureUtil.LoadSignatures() 而不是打开完整的 Document —— 这可以避免解析整个文档主体的开销。
  • 首先检查 DigitalSignatureCollection.IsValid 以快速得到通过/失败结果,然后再遍历各个 DigitalSignature.IsValid 值。
  • SignatureType 告诉您是哪种签名机制生成了签名(CryptoApi 与 XmlDsig);这会影响哪些证书字段是有意义的。
  • 在任何自动化文档接收流水线中,将 IsValid == false 视为硬性失败条件——不要将无效签名的签名元数据展示为可信。

常见问题

问题原因修复
DigitalSignatures.Count 在已签名的 .docx 上为 0文件被一个剥离签名部分的工具重新保存请对原始签名文件进行验证,而不是对重新保存的副本
签名报告 IsValid = false文档内容在签署后被更改,或证书不受信任/已过期视为无效;不要尝试“修复”签名
尝试签署文档没有任何效果此 FOSS 版本未实现签署功能在签署工作流中使用 Aspose.Words 代替 .NET(商业)
检查时 CertificateHolder.Certificate 会抛出异常底层证书数据格式错误或签名部分损坏确认源文件是真正的、未被修改的已签名文档

FAQ

可以让 Aspose.Words FOSS 用于 .NET 对文档进行签名吗?

不可以。此版本可以验证现有的数字签名,但不能创建新的签名。DigitalSignatureUtil.Sign() 方法和 SignOptions 类在 API 表面上存在,以保持结构兼容性,但在此处签名功能不可用。

如何在不完整加载文档的情况下检查文档是否已签名?

调用 DigitalSignatureUtil.LoadSignatures(fileName),它直接从文件返回一个 DigitalSignatureCollection。

“DigitalSignatureCollection.IsValid”是什么意思?

仅当集合中的每个签名都单独有效时,它才是 true —— 这是一种在检查每个 DigitalSignature 之前快速验证整个文档签名完整性的方法。

我在哪里可以获取签名的证书详情?

通过 DigitalSignature.CertificateHolder.Certificate,它返回一个标准的 .NET X509Certificate2。


API Reference 摘要

类 / 方法描述
Document.DigitalSignatures已附加到已加载文档的签名
DigitalSignatureUtil.LoadSignatures()在不加载完整文档的情况下,从文件或流读取签名
DigitalSignatureCollection只读的 DigitalSignature 对象集合;IsValid,Count
DigitalSignature单个签名:IsValid, SignTime, SubjectName, IssuerName, CertificateHolder
DigitalSignatureType枚举:CryptoApi, XmlDsig, Unknown
CertificateHolder包装签名 X509Certificate2

另请参阅

 中文