Udostępnij za pośrednictwem


Sprawdzanie poprawności X500DistinguishedName jest bardziej rygorystyczne

Począwszy od platformy .NET 10, konstruktor X500DistinguishedName, który akceptuje nazwę wyróżniającą zakodowaną w ciągu, może odrzucić wcześniej nieprawidłowe dane wejściowe lub zakodować go inaczej w systemach innych niż Windows. Jest to zgodne ze specyfikacjami kodowania i zachowaniem systemu Windows.

Poprzednie zachowanie

Poprzednie wersje platformy .NET w systemach innych niż Windows zezwalały na nieprawidłowe nazwy wyróżniające lub kodowane w sposób niedozwolony przez reguły kodowania X.520. Flaga X500DistinguishedNameFlags.ForceUTF8Encoding wymuszała używanie składnika UTF8String, nawet jeśli nie była to prawidłowa reprezentacja.

Nowe zachowanie

Począwszy od platformy .NET 10, składniki naruszające reguły kodowania zgłaszają CryptographicException w systemach pozawindowsowych, zgodnie z zachowaniem systemu Windows. Flaga X500DistinguishedNameFlags.ForceUTF8Encoding koduje tylko składniki UTF-8, gdy jest to dopuszczalne.

Wersja wprowadzona

.NET 10 (wersja zapoznawcza 1)

Typ zmiany powodującej niezgodność

Ta zmiana jest zmianą dotyczącą zachowań.

Przyczyna zmiany

Różne składniki X.500 mają określone reguły kodowania. Na przykład id-at-telephoneNumber musi być zakodowane jako ASN.1 PrintableString. Znak wykrzyknika jest nieprawidłowy dla elementu PrintableString. Rozważ następujący kod:

new X500DistinguishedName("Phone=!!");

Ten kod zwrócił wyjątek w systemie Windows, ale został zakodowany jako utF8String w systemie innych niż Windows. Podobnie, użycie X500DistinguishedNameFlags.ForceUTF8Encoding wymuszało kodowanie UTF8String nawet wtedy, gdy było to niedozwolone.

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

Ta zmiana zapewnia, że kodowanie jest zgodne ze specyfikacjami i zachowaniem systemu Windows.

Ogólnie rzecz biorąc, nie jest wymagana żadna akcja, chyba że wymagana jest zgodność z nieprawidłowym kodowaniem. Użyj System.Security.Cryptography.X509Certificates.X500DistinguishedNameBuilder, aby utworzyć wystąpienia z żądanym kodowaniem:

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

Interfejsy API, których dotyczy problem