Siamo felici di annunciare il rilascio di GroupDocs.Signature per .NET v26.9, disponibile a partire da settembre 2026. Questo aggiornamento è incentrato sulla sicurezza e introduce il supporto a .NET 10, interrompe .NET Standard 2.1 e impone impostazioni predefinite più rigide per il caricamento di risorse esterne, gli algoritmi di hash e la convalida dei certificati. Aggiunge inoltre il supporto per la firma di documenti Word con certificati post‑quantistici (ML‑DSA) e risolve diversi bug critici relativi a verifica, logging e comportamento specifico della piattaforma.

Novità di questa versione

  • [Feature] Supporto a .NET 10 e interruzione di .NET Standard 2.1 (SIGNATURENET-5938)
  • [Enhancement] Le risorse esterne non vengono più caricate per impostazione predefinita (SIGNATURENET-5950)
  • [Enhancement] Le firme digitali PDF usano SHA‑256 per impostazione predefinita e rispettano HashAlgorithm (SIGNATURENET-5976)
  • [Enhancement] SignatureFont non espone più i tipi System.Drawing su .NET 6 e versioni successive (SIGNATURENET-5943)
  • [Enhancement] La firma con un certificato scaduto o non ancora valido viene rifiutata per impostazione predefinita (SIGNATURENET-5995)
  • [Enhancement] Firma di documenti Word con certificati post‑quantistici (ML‑DSA) (SIGNATURENET-5996)
  • [Bug] Verify non controllava crittograficamente le firme digitali PDF (SIGNATURENET-5978)
  • [Bug] SubjectName e IssuerName venivano ignorati durante la verifica dei documenti PDF (SIGNATURENET-5997)
  • [Bug] Le credenziali del server di marcatura temporale venivano inviate solo quando sia nome utente che password erano impostati (SIGNATURENET-5998)
  • [Bug] Il salvataggio di presentazioni e documenti Word come immagini falliva su Linux e macOS (SIGNATURENET-5999)
  • [Bug] LoadExternalResources veniva ignorato per i documenti all’interno di archivi (SIGNATURENET-6000)
  • [Bug] Immagini esterne e fogli di stile delle immagini SVG venivano sempre caricati (SIGNATURENET-6001)
  • [Bug] La ricerca e la verifica di un foglio di calcolo con un’immagine collegata generava ArgumentNullException (SIGNATURENET-6002)
  • [Bug] CertificateVerifyOptions.Expired era errato a causa del fuso orario locale UTC (SIGNATURENET-6003)
  • [Bug] SignatureSettings.LogLevel non aveva alcun effetto (SIGNATURENET-6004)
  • [Bug] Un VerifyOptions riutilizzato riportava le firme di documenti verificati in precedenza (SIGNATURENET-6005)
  • [Bug] Un DigitalSignOptions riutilizzato firmava presentazioni successive con il primo certificato e commento (SIGNATURENET-6006)
  • [Enhancement] Miglioramenti interni (SIGNATURENET-5979)

Modifiche all’API pubblica

Membro Modifica
LoadOptions.SkipExternalResources Nuovo. bool, valore predefinito true. Quando true, le risorse esterne non vengono caricate, eccetto quelle che corrispondono a WhitelistedResources.
LoadOptions.WhitelistedResources Nuovo. List<string>, valore predefinito vuoto. Parti di indirizzi che possono essere caricati mentre SkipExternalResources è true. Un indirizzo viene caricato quando contiene una di esse, ignorando maiuscole/minuscole. Impostare null svuota la lista.
LoadOptions.LoadExternalResources Obsoleto. Funziona ancora, con il significato opposto di SkipExternalResources. Il valore predefinito è cambiato da true a false. Usarlo genera l’avviso del compilatore CS0618.
SignatureFont implicit conversion from System.Drawing.Font Rimosso dalle build .NET 6, .NET 8 e .NET 10. Obsoleto nella build .NET Framework. Assegnare invece le proprietà di SignatureFont.
SignOptions.HashAlgorithm Nessuna modifica alla firma. Ora ha effetto per le firme digitali PDF; prima veniva ignorato.
DigitalVerifyOptions.SubjectName, DigitalVerifyOptions.IssuerName Nessuna modifica alla firma. Ora hanno effetto per i documenti PDF; prima venivano ignorati.
SignatureSettings.LogLevel Nessuna modifica alla firma. Ora ha effetto: solo i messaggi dei livelli contenuti raggiungono il logger, e LogLevel.None non registra nulla. Prima, ogni messaggio veniva registrato indipendentemente dal valore. Le descrizioni dei valori di LogLevel sono state corrette.
VerificationResult.Succeeded, VerificationResult.TotalSignatures Nessuna modifica alla firma. Quando un oggetto VerifyOptions viene usato per più chiamate Verify, ora elenca solo le firme del documento appena verificato.
DigitalSignOptions.AllowExpired Nuovo. bool, valore predefinito false. Quando false, firmare con un certificato il cui periodo di validità è terminato genera GroupDocsSignatureException. Quando true, il documento viene firmato e viene registrato un avviso.
DigitalSignOptions.AllowNotYetValid Nuovo. bool, valore predefinito false. Stessa cosa, per un certificato il cui periodo di validità non è ancora iniziato.

Nuove funzionalità

Nessuna nuova funzionalità oltre a quelle elencate in Novità di questa versione e Modifiche all’API pubblica.

Esempio di codice

Consenti solo risorse esterne attendibili:

LoadOptions loadOptions = new LoadOptions
{
    WhitelistedResources = new List<string> { "https://cdn.example.com/images/" }
};
using (Signature signature = new Signature("sample.docx", loadOptions))
{
    // Vengono caricate solo le immagini da https://cdn.example.com/images/.
}

Firma con SHA‑384 e usa un certificato scaduto (con avviso):

using (Signature signature = new Signature("sample.pdf"))
{
    DigitalSignOptions options = new DigitalSignOptions("certificate.pfx")
    {
        Password = "1234567890",
        HashAlgorithm = HashAlgorithm.Sha384 // rispettato da questa versione; il valore predefinito è SHA-256
    };
    signature.Sign("signed.pdf", options);
}

Firma con un certificato scaduto esplicitamente consentito:

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);
    // Se certificate.pfx è scaduto, il documento viene firmato e la console mostra un avviso come:
    // Il certificato di firma è scaduto il 01-05-2019 12:00 UTC (subject "CN=...", thumbprint ...).
}

Firma un documento Word con un certificato post‑quantistico ML‑DSA:

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

Configura il logging per mostrare solo errori e avvisi:

SignatureSettings settings = new SignatureSettings(new ConsoleLogger())
{
    // Errori e avvisi, senza le tracce passo-passo.
    LogLevel = LogLevel.Error | LogLevel.Warning
};

Come ottenere l’aggiornamento

NuGet

Aggiorna all’ultimo pacchetto GroupDocs.Signature tramite NuGet: GroupDocs.Signature 26.9.0

Comando di installazione:

dotnet add package GroupDocs.Signature --version 26.9.0

Download diretto

Scarica gli assembly dalla pagina GroupDocs.Signature for .NET 26.9

Risorse