我们很高兴宣布 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 页面下载程序集