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] SignatureFont ya no expone tipos de System.Drawing en .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] Verify no comprobaba criptográficamente las firmas digitales PDF (SIGNATURENET-5978)
  • [Bug] SubjectName e IssuerName se 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] LoadExternalResources se 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.Expired estaba incorrecto por el desfase UTC local (SIGNATURENET-6003)
  • [Bug] SignatureSettings.LogLevel no tenía efecto (SIGNATURENET-6004)
  • [Bug] Un VerifyOptions reutilizado informaba firmas de documentos verificados anteriormente (SIGNATURENET-6005)
  • [Bug] Un DigitalSignOptions reutilizado 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

Recursos