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