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.
Novedades en esta versión
- [Feature] Compatibilidad con .NET 10 y descontinuación de .NET Standard 2.1 (SIGNATURENET-5938)
- [Enhancement] Los recursos externos ya no se cargan por defecto (SIGNATURENET-5950)
- [Enhancement] Las firmas digitales PDF usan SHA‑256 por defecto y respetan
HashAlgorithm(SIGNATURENET-5976) - [Enhancement]
SignatureFontya no expone tipos deSystem.Drawingen .NET 6 y versiones posteriores (SIGNATURENET-5943) - [Enhancement] Firmar con un certificado expirado o aún no válido se rechaza por defecto (SIGNATURENET-5995)
- [Enhancement] Firmar documentos Word con certificados post‑cuánticos (ML‑DSA) (SIGNATURENET-5996)
- [Bug]
Verifyno comprobaba criptográficamente las firmas digitales PDF (SIGNATURENET-5978) - [Bug]
SubjectNameeIssuerNamese ignoraban al verificar documentos PDF (SIGNATURENET-5997) - [Bug] Las credenciales del servidor de sellado de tiempo solo se enviaban cuando se establecían tanto el nombre de usuario como la contraseña (SIGNATURENET-5998)
- [Bug] Guardar presentaciones y documentos Word como imágenes fallaba en Linux y macOS (SIGNATURENET-5999)
- [Bug]
LoadExternalResourcesse ignoraba para documentos dentro de archivos comprimidos (SIGNATURENET-6000) - [Bug] Las imágenes externas y hojas de estilo de imágenes SVG siempre se cargaban (SIGNATURENET-6001)
- [Bug] La búsqueda y verificación de una hoja de cálculo con una imagen vinculada lanzaba
ArgumentNullException(SIGNATURENET-6002) - [Bug]
CertificateVerifyOptions.Expiredestaba incorrecto por el desfase UTC local (SIGNATURENET-6003) - [Bug]
SignatureSettings.LogLevelno tenía efecto (SIGNATURENET-6004) - [Bug] Un
VerifyOptionsreutilizado informaba firmas de documentos verificados anteriormente (SIGNATURENET-6005) - [Bug] Un
DigitalSignOptionsreutilizado firmaba presentaciones posteriores con su primer certificado y comentario (SIGNATURENET-6006) - [Enhancement] Mejoras internas (SIGNATURENET-5979)
Cambios en la API pública
| Miembro | Cambio |
|---|---|
LoadOptions.SkipExternalResources |
Nuevo. bool, valor predeterminado true. Cuando es true, los recursos externos no se cargan, excepto los que coinciden con WhitelistedResources. |
LoadOptions.WhitelistedResources |
Nuevo. List<string>, valor predeterminado vacío. Partes de direcciones que pueden cargarse mientras SkipExternalResources es true. Una dirección se carga cuando contiene una de ellas, sin distinguir mayúsculas. Asignar null vacía la lista. |
LoadOptions.LoadExternalResources |
Obsoleto. Sigue funcionando, con el significado opuesto a SkipExternalResources. Su valor predeterminado cambió de true a false. Usarlo genera la advertencia del compilador CS0618. |
Conversión implícita de SignatureFont desde System.Drawing.Font |
Eliminado de las compilaciones .NET 6, .NET 8 y .NET 10. Obsoleto en la compilación .NET Framework. Asigne directamente las propiedades de SignatureFont. |
SignOptions.HashAlgorithm |
Sin cambio de firma. Ahora tiene efecto para firmas digitales PDF; antes se ignoraba. |
DigitalVerifyOptions.SubjectName, DigitalVerifyOptions.IssuerName |
Sin cambio de firma. Ahora tienen efecto para documentos PDF; antes se ignoraban allí. |
SignatureSettings.LogLevel |
Sin cambio de firma. Ahora tiene efecto: solo los mensajes de los niveles incluidos llegan al registrador, y LogLevel.None no registra nada. Antes, se registraba cualquier mensaje sin importar el valor. Se corrigieron las descripciones de los valores de LogLevel. |
VerificationResult.Succeeded, VerificationResult.TotalSignatures |
Sin cambio de firma. Cuando un objeto VerifyOptions se usa para varias llamadas a Verify, ahora listan solo las firmas del documento recién verificado. |
DigitalSignOptions.AllowExpired |
Nuevo. bool, valor predeterminado false. Cuando es false, firmar con un certificado cuya validez ha finalizado lanza GroupDocsSignatureException. Cuando es true, el documento se firma y se registra una advertencia. |
DigitalSignOptions.AllowNotYetValid |
Nuevo. bool, valor predeterminado false. Lo mismo, pero para un certificado cuya validez aún no ha comenzado. |
Nuevas características
No hay nuevas características más allá de las listadas en Novedades en esta versión y Cambios en la API pública.
Ejemplo de código
Permitir solo recursos externos de confianza:
LoadOptions loadOptions = new LoadOptions
{
WhitelistedResources = new List<string> { "https://cdn.example.com/images/" }
};
using (Signature signature = new Signature("sample.docx", loadOptions))
{
// Solo se cargan imágenes de https://cdn.example.com/images/.
}
Firmar con SHA‑384 y usar un certificado expirado (con advertencia):
using (Signature signature = new Signature("sample.pdf"))
{
DigitalSignOptions options = new DigitalSignOptions("certificate.pfx")
{
Password = "1234567890",
HashAlgorithm = HashAlgorithm.Sha384 // respetado a partir de esta versión; el predeterminado es SHA‑256
};
signature.Sign("signed.pdf", options);
}
Firmar con un certificado expirado permitido explícitamente:
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);
// Si certificate.pfx ha expirado, el documento se firma y la consola muestra una advertencia como:
// The signing certificate expired on 2019-05-01 12:00 UTC (subject "CN=...", thumbprint ...).
}
Firmar un documento Word con un certificado post‑cuántico ML‑DSA:
using (Signature signature = new Signature("sample.docx"))
{
DigitalSignOptions options = new DigitalSignOptions("ml-dsa-65.pfx")
{
Password = "1234567890"
};
signature.Sign("signed.docx", options);
}
Configurar el registro para mostrar solo errores y advertencias:
SignatureSettings settings = new SignatureSettings(new ConsoleLogger())
{
// Errores y advertencias, sin los rastros paso a paso.
LogLevel = LogLevel.Error | LogLevel.Warning
};
Cómo obtener la actualización
NuGet
Actualice al paquete más reciente de GroupDocs.Signature mediante NuGet: GroupDocs.Signature 26.9.0
Comando de instalación:
dotnet add package GroupDocs.Signature --version 26.9.0
Descarga directa
Descargue los ensamblados desde la página GroupDocs.Signature for .NET 26.9