我們很高興宣佈 GroupDocs.Signature for .NET v26.9 已於 2026 年 9 月 發佈。此版本是一個以安全為核心的更新,加入了 .NET 10 支援,停止支援 .NET Standard 2.1,並對載入外部資源、雜湊演算法以及憑證驗證的預設行為加以加強。它同時支援使用後量子 (ML‑DSA) 憑證簽署 Word 文件,並修復了多項與驗證、日誌記錄以及平台特定行為相關的關鍵錯誤。

此版本的新功能

  • [Feature] .NET 10 支援,停止支援 .NET Standard 2.1 (SIGNATURENET-5938)
  • [Enhancement] 預設不再載入外部資源 (SIGNATURENET-5950)
  • [Enhancement] PDF 數位簽章預設使用 SHA‑256,並遵循 HashAlgorithm (SIGNATURENET-5976)
  • [Enhancement] SignatureFont 在 .NET 6 及以上版本不再公開 System.Drawing 類型 (SIGNATURENET-5943)
  • [Enhancement] 預設拒絕使用已過期或尚未生效的憑證簽署 (SIGNATURENET-5995)
  • [Enhancement] 使用後量子 (ML‑DSA) 憑證簽署 Word 文件 (SIGNATURENET-5996)
  • [Bug] Verify 未對 PDF 數位簽章進行加密檢查 (SIGNATURENET-5978)
  • [Bug] 驗證 PDF 文件時忽略了 SubjectName 與 IssuerName (SIGNATURENET-5997)
  • [Bug] 時間戳伺服器憑證僅在同時設定使用者名稱與密碼時才會傳送 (SIGNATURENET-5998)
  • [Bug] 在 Linux 與 macOS 上將簡報與 Word 文件另存為影像失敗 (SIGNATURENET-5999)
  • [Bug] LoadExternalResources 在壓縮檔內的文件被忽略 (SIGNATURENET-6000)
  • [Bug] SVG 圖片的外部圖像與樣式表始終被載入 (SIGNATURENET-6001)
  • [Bug] 搜尋與驗證含有連結圖片的試算表時拋出 ArgumentNullException (SIGNATURENET-6002)
  • [Bug] CertificateVerifyOptions.Expired 因本地 UTC 偏移而錯誤 (SIGNATURENET-6003)
  • [Bug] SignatureSettings.LogLevel 無效 (SIGNATURENET-6004)
  • [Bug] 重複使用的 VerifyOptions 會報告先前已驗證文件的簽章 (SIGNATURENET-6005)
  • [Bug] 重複使用的 DigitalSignOptions 會以第一個憑證與註解簽署後續簡報 (SIGNATURENET-6006)
  • [Enhancement] 內部改進 (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 簽章介面未變更。現在會影響 PDF 數位簽章;之前被忽略。
DigitalVerifyOptions.SubjectName、DigitalVerifyOptions.IssuerName 簽章介面未變更。現在會影響 PDF 文件;之前在 PDF 中被忽略。
SignatureSettings.LogLevel 簽章介面未變更。現在會生效:僅記錄包含於該等級中的訊息,LogLevel.None 則不記錄任何訊息。之前無論設定為何,都會記錄所有訊息。已修正 LogLevel 各值的說明。
VerificationResult.Succeeded、VerificationResult.TotalSignatures 簽章介面未變更。當同一個 VerifyOptions 物件被多次呼叫 Verify 時,現在僅列出剛驗證文件的簽章。
DigitalSignOptions.AllowExpired 新增。 bool,預設 false。設定為 false 時,使用已過期憑證簽署會拋出 GroupDocsSignatureException;設定為 true 時,文件仍會簽署,並記錄警告。
DigitalSignOptions.AllowNotYetValid 新增。 bool,預設 false。與 AllowExpired 類似,針對尚未生效的憑證。

新功能

除 此版本的新功能 與 公開 API 變更 中列出的項目外,無其他新功能。

程式碼範例

僅允許受信任的外部資源:

LoadOptions loadOptions = new LoadOptions
{
    WhitelistedResources = new List<string> { "https://cdn.example.com/images/" }
};
using (Signature signature = new Signature("sample.docx", loadOptions))
{
    // 僅會載入來自 https://cdn.example.com/images/ 的影像。
}

使用 SHA‑384 並以過期憑證簽署(會產生警告):

using (Signature signature = new Signature("sample.pdf"))
{
    DigitalSignOptions options = new DigitalSignOptions("certificate.pfx")
    {
        Password = "1234567890",
        HashAlgorithm = HashAlgorithm.Sha384 // 從此版本起生效;預設為 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);
    // 若 certificate.pfx 已過期,文件仍會簽署,且主控台會顯示類似以下警告:
    // 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())
{
    // 僅記錄錯誤與警告,不顯示逐步追蹤。
    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 頁面下載組件

資源