Delen via


X500DistinguishedName-validatie is strenger

Vanaf .NET 10 kan de X500DistinguishedName constructor die een als tekenreeks gecodeerde DN accepteert, eerder geaccepteerde ongeldige invoer weigeren of deze anders coderen op niet-Windows-systemen. Dit komt overeen met coderingsspecificaties en Windows-gedrag.

Vorig gedrag

In eerdere versies van .NET op niet-Windows-systemen werden onjuiste onderscheidende namen toegestaan of gecodeerd op een manier die niet is toegestaan volgens de coderingsregels van X.520. De X500DistinguishedNameFlags.ForceUTF8Encoding-vlag dwong componenten om een UTF8String te gebruiken, zelfs als dit geen geldige weergave was.

Nieuw gedrag

Vanaf .NET 10 genereren onderdelen die in strijd zijn met coderingsregels een CryptographicException op niet-Windows-systemen die overeenkomen met het Windows-gedrag. De X500DistinguishedNameFlags.ForceUTF8Encoding markeert alleen UTF-8-onderdelen indien toegestaan.

Versie uitgebracht

.NET 10

Type wijziging die fouten veroorzaken

Deze wijziging is een gedragswijziging.

Reden voor wijziging

Verschillende X.500-onderdelen hebben specifieke coderingsregels. id-at-telephoneNumber moet bijvoorbeeld worden gecodeerd als een ASN.1-PrintableString. Het uitroepteken is ongeldig voor een PrintableString. Houd rekening met de volgende code:

new X500DistinguishedName("Phone=!!");

Deze code heeft een uitzondering in Windows veroorzaakt, maar is gecodeerd als UTF8String in niet-Windows. Op dezelfde manier werd X500DistinguishedNameFlags.ForceUTF8Encoding UTF8String-codering geforceerd gebruikt, zelfs als dit niet was toegestaan.

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

Deze wijziging zorgt ervoor dat codering overeenkomt met specificaties en Windows-gedrag.

Over het algemeen is er geen actie nodig, tenzij compatibiliteit met onjuiste codering is vereist. Gebruik System.Security.Cryptography.X509Certificates.X500DistinguishedNameBuilder om exemplaren te maken met de gewenste codering:

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

Beïnvloede API's