Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.
Doporučená akce
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();