Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
En .NET Core 2.0 en macOS y Linux, la implementación EnvelopedCms ajustaba incorrectamente el contenido en un valor ASN.1 OCTET STRING adicional. Para mantener la compatibilidad al procesar el contenido creado con este error, la EnvelopedCms clase sigue examinando el contenido descifrado e intentó quitar los datos adicionales. EnvelopedCms quitó los datos adicionales en Windows cuando se usa una clave privada externa y en todos los demás sistemas operativos para cualquier descifrado.
Desafortunadamente, este código de compatibilidad oportunista no puede distinguir entre los documentos creados incorrectamente y los documentos que se crearon correctamente, pero tienen la misma forma de datos.
Comportamiento anterior
Anteriormente, si el contenido descifrado comenzara con el valor 0x04 de byte y un valor de longitud BER legalmente codificado ASN.1 que fuera menor o igual que el número de bytes restantes en el contenido, los datos proporcionados en el atributo envelopedCms.ContentInfo.Content solo recibían los datos asociados a la parte de octetos de contenido del valor cuando se trataba como una CADENA DE OCTETOS ASN.1.
Por ejemplo, si el contenido descifrado inicialmente era la serie de bytes { 0x04, 0x03, 0x01, 0x02, 0x03 } o la serie de bytes { 0x04, 0x03, 0x01, 0x02, 0x03, [continued content] }, el valor de envelopedCms.ContentInfo.Content era la serie de bytes { 0x01, 0x02, 0x03 }.
Los valores que no comenzaron con 0x04, ni comenzaron con 0x04 , pero que no fueron seguidos de un valor de longitud codificado de forma aceptable, se notificaron completamente.
Para algunas sobrecargas de EnvelopedCms.Decrypt, este comportamiento solo se produjo en sistemas operativos que no son Windows. Para obtener más información, consulte API afectadas.
Nuevo comportamiento
La EnvelopedCms clase ya no intenta solucionar el problema anterior y siempre informa fielmente del contenido descifrado.
Si va a procesar documentos creados por la versión .NET Core 2.0 de la EnvelopedCms clase en macOS o Linux, verá datos adicionales al principio del contenido.
Versión introducida
.NET 7
Tipo de cambio disruptivo
Este cambio puede afectar a la compatibilidad binaria.
Motivo del cambio
El código de compatibilidad no pudo diferenciar entre documentos creados incorrectamente y documentos que transportaban datos legítimamente que parecían una CADENA DE OCTETOS codificada en BER ASN.1.
Debido a la naturaleza de la codificación BER, los autores de llamadas que se vieron afectados negativamente por este código de compatibilidad no pudieron recuperar fácilmente sus datos que faltan.
Acción recomendada
Los autores de llamadas que leen documentos creados con EnvelopedCms en .NET Core 2.0 para macOS o Linux pueden agregar código para quitar los datos adicionales. Para quitarla, use la AsnDecoder clase del paquete NuGet System.Formats.Asn1, que ya es una dependencia de la EnvelopedCms clase .
envelopedCms.Decrypt(...);
byte[] content = envelopedCms.ContentInfo.Content;
if (envelopedCms.ContentInfo.Oid.Value == "1.2.840.113549.1.7.1")
{
if (content?.Length > 0 && content[0] == 0x04)
{
try
{
content = AsnDecoder.ReadOctetString(content, AsnEncodingRules.BER, out _);
}
catch (AsnContentException)
{
}
}
}
Las APIs afectadas
- System.Security.Cryptography.Pkcs.EnvelopedCms.Decrypt(RecipientInfo, AsymmetricAlgorithm)
- System.Security.Cryptography.Pkcs.EnvelopedCms.Decrypt(RecipientInfo, X509Certificate2Collection) (solo en sistemas operativos que no son Windows)
- System.Security.Cryptography.Pkcs.EnvelopedCms.Decrypt(RecipientInfo) (solo en sistemas operativos que no son Windows)
- System.Security.Cryptography.Pkcs.EnvelopedCms.Decrypt(X509Certificate2Collection) (solo en sistemas operativos que no son Windows)