我们很高兴宣布 GroupDocs.Signature for .NET v26.9 已于 2026 年 9 月 正式发布。此版本是一次以安全为重点的更新,新增对 .NET 10 的支持,停止对 .NET Standard 2.1 的支持,并对加载外部资源、哈希算法以及证书验证的默认行为进行更严格的限制。它还增加了使用后量子(ML‑DSA)证书对 Word 文档进行签名的功能,并修复了多个与验证、日志记录以及平台特定行为相关的关键错误。

本次发布的新内容

  • [功能] 支持 .NET 10 并停止对 .NET Standard 2.1 的支持 (SIGNATURENET-5938)
  • [改进] 默认不再加载外部资源 (SIGNATURENET-5950)
  • [改进] PDF 数字签名默认使用 SHA‑256,并遵循 HashAlgorithm 设置 (SIGNATURENET-5976)
  • [改进] .NET 6 及更高版本中 SignatureFont 不再公开 System.Drawing 类型 (SIGNATURENET-5943)
  • [改进] 默认拒绝使用已过期或尚未生效的证书进行签名 (SIGNATURENET-5995)
  • [改进] 使用后量子(ML‑DSA)证书签署 Word 文档 (SIGNATURENET-5996)
  • [错误] 验证未对 PDF 数字签名进行加密检查 (SIGNATURENET-5978)
  • [错误] 验证 PDF 文档时忽略了 SubjectName 和 IssuerName (SIGNATURENET-5997)
  • [错误] 仅在同时设置了用户名和密码时才发送时间戳服务器凭据 (SIGNATURENET-5998)
  • [错误] 在 Linux 和 macOS 上将演示文稿和 Word 文档保存为图像时失败 (SIGNATURENET-5999)
  • [错误] 对存档内的文档忽略了 LoadExternalResources (SIGNATURENET-6000)
  • [错误] 始终加载 SVG 图像的外部图片和样式表 (SIGNATURENET-6001)
  • [错误] 对带有链接图片的电子表格进行搜索和验证时抛出 ArgumentNullException (SIGNATURENET-6002)
  • [错误] CertificateVerifyOptions.Expired 因本地 UTC 偏移而错误 (SIGNATURENET-6003)
  • [错误] SignatureSettings.LogLevel 未生效 (SIGNATURENET-6004)
  • [错误] 重复使用的 VerifyOptions 会报告之前已验证文档的签名 (SIGNATURENET-6005)
  • [错误] 重复使用的 DigitalSignOptions 在后续演示文稿中使用其首次证书和注释进行签名 (SIGNATURENET-6006)
  • [改进] 内部改进 (SIGNATURENET-5979)

公共 API 更改

成员 更改
LoadOptions.SkipExternalResources 新建。 bool,默认 true。当为 true 时,不会加载外部资源,除非它们匹配 WhitelistedResources。
LoadOptions.WhitelistedResources 新建。 List<string>,默认为空。SkipExternalResources 为 true 时可以加载的地址部分。当地址包含其中任意一个(不区分大小写)时即加载。将其设为 null 可清空列表。
LoadOptions.LoadExternalResources 已过时。 仍然有效,但含义与 SkipExternalResources 相反。其默认值已从 true 改为 false。使用时会产生编译器警告 CS0618。
SignatureFont 从 System.Drawing.Font 的隐式转换 已移除 在 .NET 6、.NET 8 和 .NET 10 构建中。已过时 在 .NET Framework 构建中。请改为直接设置 SignatureFont 的属性。
SignOptions.HashAlgorithm API 未变。现在对 PDF 数字签名生效;之前被忽略。
DigitalVerifyOptions.SubjectName、DigitalVerifyOptions.IssuerName API 未变。现在对 PDF 文档生效;之前在此被忽略。
SignatureSettings.LogLevel API 未变。现在生效:仅记录其包含级别的日志,LogLevel.None 不记录任何日志。之前无论设置为何值,都会记录所有消息。已纠正 LogLevel 各值的描述。
VerificationResult.Succeeded、VerificationResult.TotalSignatures API 未变。当同一个 VerifyOptions 对象用于多次 Verify 调用时,现在仅列出最近一次验证的文档的签名。
DigitalSignOptions.AllowExpired 新建。 bool,默认 false。当为 false 时,使用已过期的证书签名会抛出 GroupDocsSignatureException。当为 true 时,文档仍会被签名,并记录警告。
DigitalSignOptions.AllowNotYetValid 新建。 bool,默认 false。同上,但针对尚未生效的证书。

新功能

除 本次发布的新内容 和 公共 API 更改 中列出的内容外,没有其他新功能。

代码示例

仅允许受信任的外部资源:

LoadOptions loadOptions = new LoadOptions
{
    WhitelistedResources = new List<string> { "https://cdn.example.com/images/" }
};
using (Signature signature = new Signature("sample.docx", loadOptions))
{
    // Only images from https://cdn.example.com/images/ are loaded.
}

使用 SHA‑384 并使用已过期证书签名(带警告):

using (Signature signature = new Signature("sample.pdf"))
{
    DigitalSignOptions options = new DigitalSignOptions("certificate.pfx")
    {
        Password = "1234567890",
        HashAlgorithm = HashAlgorithm.Sha384 // honoured from this release; the default is SHA-256
    };
    signature.Sign("signed.pdf", options);
}

显式允许使用已过期证书签名:

SignatureSettings settings = new SignatureSettings(new ConsoleLogger());
using (Signature signature = new Signature("sample.pdf", settings))
{
    DigitalSignOptions options = new DigitalSignOptions("certificate.pfx")
    {
        Password = "1234567890",
        AllowExpired = true
    };
    signature.Sign("signed.pdf", options);
    // If certificate.pfx has expired, the document is signed and the console shows a warning such as:
    // The signing certificate expired on 2019-05-01 12:00 UTC (subject "CN=...", thumbprint ...).
}

使用后量子 ML‑DSA 证书签署 Word 文档:

using (Signature signature = new Signature("sample.docx"))
{
    DigitalSignOptions options = new DigitalSignOptions("ml-dsa-65.pfx")
    {
        Password = "1234567890"
    };
    signature.Sign("signed.docx", options);
}

配置日志仅显示错误和警告:

SignatureSettings settings = new SignatureSettings(new ConsoleLogger())
{
    // Errors and warnings, without the step-by-step traces.
    LogLevel = LogLevel.Error | LogLevel.Warning
};

如何获取更新

NuGet

通过 NuGet 将 GroupDocs.Signature 包升级到最新版本: GroupDocs.Signature 26.9.0

安装命令:

dotnet add package GroupDocs.Signature --version 26.9.0

直接下载

从 GroupDocs.Signature for .NET 26.9 页面下载程序集

资源