Sdílet prostřednictvím


Ověření X500DistinguishedName je přísnější

Počínaje rozhraním .NET 10 může konstruktor X500DistinguishedName, který přijímá rozlišující název zakódovaný řetězcem, odmítnout dříve přijatý neplatný vstup nebo ho kódovat odlišně v systémech mimo Windows. To odpovídá specifikacím kódování a chování systému Windows.

Předchozí chování

Předchozí verze rozhraní .NET v systémech, které nejsou systémem Windows, umožňovaly nesprávné rozlišující názvy nebo je kódovaly způsobem, který není povolen pravidly kódování X.520. Příznak X500DistinguishedNameFlags.ForceUTF8Encoding vynutil součást použít UTF8String, i když nešlo o platnou reprezentaci.

Nové chování

Počínaje rozhraním .NET 10 mohou komponenty, které porušují pravidla kódování, vyvolat CryptographicException v systémech jiných než Windows, což odpovídá chování na systémech Windows. X500DistinguishedNameFlags.ForceUTF8Encoding příznak pouze UTF-8 kóduje komponenty, pokud je to možné.

Zavedená verze

.NET 10

Typ zásadní změny

Tato změna je změnou chování.

Důvod změny

Různé komponenty X.500 mají specifická pravidla kódování. Například id-at-telephoneNumber musí být kódováno jako ASN.1 PrintableString. Znak vykřičníku je neplatný pro printableString. Vezměte v úvahu následující kód:

new X500DistinguishedName("Phone=!!");

Tento kód vyvolal výjimku ve Windows, ale byl kódován jako UTF8String v jiných systémech než Windows. Podobně použití X500DistinguishedNameFlags.ForceUTF8Encoding, které vynucuje kódování UTF8String, i když to není povoleno:

new X500DistinguishedName("Phone=000-555-1234", X500DistinguishedNameFlags.ForceUTF8Encoding);

Tato změna zajišťuje, že kódování odpovídá specifikacím a chování systému Windows.

Obecně platí, že není nutná žádná akce, pokud není vyžadována kompatibilita s nesprávným kódováním. Pomocí System.Security.Cryptography.X509Certificates.X500DistinguishedNameBuilder vytvořte instance s požadovaným kódováním:

using System.Formats.Asn1;
using System.Security.Cryptography.X509Certificates;

X500DistinguishedNameBuilder builder = new();
builder.Add("2.5.4.20", "000-555-1234", UniversalTagNumber.UTF8String);
X500DistinguishedName dn = builder.Build();

Ovlivněná rozhraní API