X500DistinguishedName-validering är striktare

Från och med .NET 10 kan X500DistinguishedName konstruktorn som accepterar ett strängkodat unikt namn avvisa tidigare accepterade ogiltiga indata eller koda dem på ett annat sätt i system som inte är Windows. Detta överensstämmer med kodningsspecifikationer och Windows-beteende.

Tidigare beteende

Tidigare versioner av .NET på icke-Windows-system tillät felaktiga unika namn eller kodade dem på ett sätt som inte tillåts av X.520-kodningsregler. Flaggan X500DistinguishedNameFlags.ForceUTF8Encoding tvingade komponenter att använda en UTF8String även om det inte var en giltig representation.

Nytt beteende

Från och med .NET 10 utlöser komponenter som bryter mot kodningsregler en CryptographicException på icke-Windows-system som matchar Windows-beteendet. Flaggan X500DistinguishedNameFlags.ForceUTF8Encoding UTF-8-kodar endast komponenter när det är tillåtet.

Version introducerad

.NET 10

Typ av brytande ändring

Den här ändringen är en beteendeförändring.

Orsak till ändring

Olika X.500-komponenter har specifika kodningsregler. Till exempel måste id-at-telephoneNumber kodas som en ASN.1-PrintableString. Utropstecknet är ogiltigt för en PrintableString. Överväg följande kod:

new X500DistinguishedName("Phone=!!");

Den här koden utlöste ett undantag i Windows men kodades som en UTF8String på icke-Windows. På samma sätt använde X500DistinguishedNameFlags.ForceUTF8Encoding tvungen UTF8String-kodning även när det inte var tillåtet:

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

Den här ändringen säkerställer att kodningen överensstämmer med specifikationer och Windows-beteende.

I allmänhet krävs ingen åtgärd om inte kompatibilitet med felaktig kodning krävs. Använd System.Security.Cryptography.X509Certificates.X500DistinguishedNameBuilder för att skapa instanser med önskad kodning:

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();

Berörda API:er