We’re happy to announce the release of GroupDocs.Signature for .NET v26.9, available as of September 2026. This release is a security‑focused update that introduces .NET 10 support, discontinues .NET Standard 2.1, and enforces stricter defaults for loading external resources, hashing algorithms, and certificate validation. It also adds support for signing Word documents with post‑quantum (ML‑DSA) certificates and resolves several critical bugs related to verification, logging, and platform‑specific behavior.

Co nowego w tej wersji

  • [Feature] Obsługa .NET 10 i wycofanie .NET Standard 2.1 (SIGNATURENET-5938)
  • [Enhancement] Zasoby zewnętrzne nie są już ładowane domyślnie (SIGNATURENET-5950)
  • [Enhancement] Cyfrowe podpisy PDF używają domyślnie SHA-256 i respektują HashAlgorithm (SIGNATURENET-5976)
  • [Enhancement] SignatureFont nie udostępnia już typów System.Drawing w .NET 6 i nowszych (SIGNATURENET-5943)
  • [Enhancement] Podpisywanie przy użyciu wygasłego lub jeszcze nieważnego certyfikatu jest domyślnie odrzucane (SIGNATURENET-5995)
  • [Enhancement] Podpisywanie dokumentów Word przy użyciu certyfikatów post‑kwantowych (ML‑DSA) (SIGNATURENET-5996)
  • [Bug] Verify nie sprawdzał kryptograficznie cyfrowych podpisów PDF (SIGNATURENET-5978)
  • [Bug] SubjectName i IssuerName były ignorowane przy weryfikacji dokumentów PDF (SIGNATURENET-5997)
  • [Bug] Dane uwierzytelniające serwera znaczników czasu były wysyłane tylko wtedy, gdy ustawiono zarówno nazwę użytkownika, jak i hasło (SIGNATURENET-5998)
  • [Bug] Zapisywanie prezentacji i dokumentów Word jako obrazy nie powiodło się w systemach Linux i macOS (SIGNATURENET-5999)
  • [Bug] LoadExternalResources było ignorowane dla dokumentów wewnątrz archiwów (SIGNATURENET-6000)
  • [Bug] Zewnętrzne obrazy i arkusze stylów obrazów SVG były zawsze ładowane (SIGNATURENET-6001)
  • [Bug] Wyszukiwanie i weryfikacja arkusza kalkulacyjnego z powiązanym obrazem wywołały ArgumentNullException (SIGNATURENET-6002)
  • [Bug] CertificateVerifyOptions.Expired był niepoprawny o lokalny offset UTC (SIGNATURENET-6003)
  • [Bug] SignatureSettings.LogLevel nie miał żadnego efektu (SIGNATURENET-6004)
  • [Bug] Ponowne użycie VerifyOptions zgłaszało podpisy dokumentów zweryfikowanych wcześniej (SIGNATURENET-6005)
  • [Bug] Ponowne użycie DigitalSignOptions podpisywało późniejsze prezentacje pierwszym certyfikatem i komentarzem (SIGNATURENET-6006)
  • [Enhancement] Wewnętrzne ulepszenia (SIGNATURENET-5979)

Zmiany w publicznym API

Członek Zmiana
LoadOptions.SkipExternalResources Nowe. bool, domyślnie true. Gdy true, zasoby zewnętrzne nie są ładowane, z wyjątkiem tych, które pasują do WhitelistedResources.
LoadOptions.WhitelistedResources Nowe. List<string>, domyślnie pusty. Części adresów, które mogą być ładowane, gdy SkipExternalResources jest true. Adres jest ładowany, gdy zawiera jedną z nich, bez uwzględniania wielkości liter. Ustawienie null czyści listę.
LoadOptions.LoadExternalResources Przestarzałe. Nadal działa, z odwrotnym znaczeniem niż SkipExternalResources. Jego domyślna wartość zmieniła się z true na false. Użycie powoduje ostrzeżenie kompilatora CS0618.
SignatureFont implicit conversion from System.Drawing.Font Usunięto z kompilacji .NET 6, .NET 8 i .NET 10. Przestarzałe w kompilacji .NET Framework. Zamiast tego przypisz właściwości SignatureFont.
SignOptions.HashAlgorithm Brak zmiany w sygnaturze. Teraz ma wpływ na cyfrowe podpisy PDF; wcześniej był ignorowany.
DigitalVerifyOptions.SubjectName, DigitalVerifyOptions.IssuerName Brak zmiany w sygnaturze. Teraz mają wpływ na dokumenty PDF; wcześniej były tam ignorowane.
SignatureSettings.LogLevel Brak zmiany w sygnaturze. Teraz ma wpływ: tylko wiadomości poziomów zawartych w LogLevel trafiają do loggera, a LogLevel.None nie loguje nic. Wcześniej każda wiadomość była logowana niezależnie od wartości. Opisy wartości LogLevel zostały poprawione.
VerificationResult.Succeeded, VerificationResult.TotalSignatures Brak zmiany w sygnaturze. Gdy jeden obiekt VerifyOptions jest używany w kilku wywołaniach Verify, teraz wymienia tylko podpisy właśnie zweryfikowanego dokumentu.
DigitalSignOptions.AllowExpired Nowe. bool, domyślnie false. Gdy false, podpisywanie certyfikatem, którego okres ważności się zakończył, powoduje wyrzucenie GroupDocsSignatureException. Gdy true, dokument jest podpisywany i logowane jest ostrzeżenie.
DigitalSignOptions.AllowNotYetValid Nowe. bool, domyślnie false. To samo, dla certyfikatu, którego okres ważności jeszcze się nie rozpoczął.

Nowe funkcje

Brak nowych funkcji poza wymienionymi w Co nowego w tej wersji i Zmiany w publicznym API.

Przykład kodu

Zezwól tylko na zaufane zasoby zewnętrzne:

LoadOptions loadOptions = new LoadOptions
{
    WhitelistedResources = new List<string> { "https://cdn.example.com/images/" }
};
using (Signature signature = new Signature("sample.docx", loadOptions))
{
    // Ładowane są tylko obrazy z https://cdn.example.com/images/
}

Podpisz przy użyciu SHA‑384 i użyj wygasłego certyfikatu (z ostrzeżeniem):

using (Signature signature = new Signature("sample.pdf"))
{
    DigitalSignOptions options = new DigitalSignOptions("certificate.pfx")
    {
        Password = "1234567890",
        HashAlgorithm = HashAlgorithm.Sha384 // respektowane od tej wersji; domyślnie jest SHA-256
    };
    signature.Sign("signed.pdf", options);
}

Podpisz przy użyciu wygasłego certyfikatu, zezwalając wyraźnie:

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);
    // Jeśli certificate.pfx wygasł, dokument jest podpisywany i konsola wyświetla ostrzeżenie takie jak:
    // Certyfikat podpisujący wygasł 2019-05-01 12:00 UTC (subject "CN=...", thumbprint ...).
}

Podpisz dokument Word przy użyciu certyfikatu post‑kwantowego ML‑DSA:

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

Skonfiguruj logowanie, aby wyświetlało tylko błędy i ostrzeżenia:

SignatureSettings settings = new SignatureSettings(new ConsoleLogger())
{
    // Błędy i ostrzeżenia, bez szczegółowych śladów krok po kroku.
    LogLevel = LogLevel.Error | LogLevel.Warning
};

Jak uzyskać aktualizację

NuGet

Uaktualnij do najnowszego pakietu GroupDocs.Signature za pośrednictwem NuGet: GroupDocs.Signature 26.9.0

Polecenie instalacji:

dotnet add package GroupDocs.Signature --version 26.9.0

Bezpośrednie pobranie

Pobierz zestawy z GroupDocs.Signature for .NET 26.9 page

Zasoby