Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In .NET Core 2.0 op macOS en Linux was de implementatie van EnvelopedCms onjuist doordat het de inhoud verpakte in een extra ASN.1 OCTET STRING-waarde. Om compatibiliteit te behouden bij het verwerken van inhoud die met deze fout is gemaakt, keek de EnvelopedCms klasse nog steeds naar de ontsleutelde inhoud en probeerde de extra gegevens te verwijderen. EnvelopedCms verwijderde de extra gegevens in Windows bij gebruik van een externe persoonlijke sleutel en op alle andere besturingssystemen voor elke ontsleuteling.
Helaas kan deze opportunistische compatibiliteitscode geen onderscheid maken tussen documenten die onjuist zijn gemaakt en documenten die correct zijn gemaakt, maar dezelfde gegevensvorm hebben.
Vorig gedrag
Voorheen, als de ontsleutelde inhoud begon met de bytewaarde 0x04 en een wettelijk gecodeerde ASN.1 BER lengtewaarde die kleiner was dan of gelijk was aan het aantal bytes dat in de inhoud resteerde, ontvingen de gegevens in de envelopedCms.ContentInfo.Content eigenschap alleen de gegevens die zijn gekoppeld aan het inhouds-octetsgedeelte van de waarde als een ASN.1 OCTET-TEKENREEKS.
Als de oorspronkelijk ontsleutelde inhoud bijvoorbeeld de bytereeks { 0x04, 0x03, 0x01, 0x02, 0x03 } of { 0x04, 0x03, 0x01, 0x02, 0x03, [continued content] } was, dan was de waarde van envelopedCms.ContentInfo.Content de bytereeks { 0x01, 0x02, 0x03 }.
Waarden die niet met 0x04 begonnen, of die met 0x04 begonnen maar niet gevolgd werden door een acceptabel gecodeerde lengtewaarde, werden volledig gerapporteerd.
Voor sommige overloads van EnvelopedCms.Decrypt trad dit gedrag alleen op niet-Windows-besturingssystemen op. Zie Affected API's voor meer informatie.
Nieuw gedrag
De EnvelopedCms klasse probeert het vorige probleem niet meer te omzeilen en rapporteert altijd de ontsleutelde inhoud getrouw.
Als u documenten verwerkt die zijn gemaakt door de .NET Core 2.0-versie van de EnvelopedCms klasse op macOS of Linux, ziet u extra gegevens aan het begin van de inhoud.
Geïntroduceerde versie
.NET 7
Type van brekende verandering
Deze wijziging kan van invloed zijn op binaire compatibiliteit.
Reden voor wijziging
De compatibiliteitscode kon geen onderscheid maken tussen onjuist gemaakte documenten en documenten die legitiem gegevens vervoerden die op een BER-gecodeerde ASN.1 OCTET STRING leken.
Vanwege de aard van de BER-codering konden bellers die negatief werden beïnvloed door deze compatibiliteitscode hun ontbrekende gegevens niet eenvoudig herstellen.
Aanbevolen actie
Gebruikers die documenten lezen die zijn gemaakt met EnvelopedCms op .NET Core 2.0 voor macOS of Linux, kunnen code toevoegen om de extra gegevens te verwijderen. Als u deze wilt verwijderen, gebruikt u de AsnDecoder klasse uit het NuGet-pakket System.Formats.Asn1, dat al een afhankelijkheid van de EnvelopedCms klasse is.
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)
{
}
}
}
Betreffende API's
- System.Security.Cryptography.Pkcs.EnvelopedCms.Decrypt(RecipientInfo, AsymmetricAlgorithm)
- System.Security.Cryptography.Pkcs.EnvelopedCms.Decrypt(RecipientInfo, X509Certificate2Collection) (alleen voor niet-Windows)
- System.Security.Cryptography.Pkcs.EnvelopedCms.Decrypt(RecipientInfo) (alleen voor niet-Windows)
- System.Security.Cryptography.Pkcs.EnvelopedCms.Decrypt(X509Certificate2Collection) (alleen voor niet-Windows)