La validation X500DistinguishedName est plus stricte
À compter de .NET 10, le constructeur X500DistinguishedName qui accepte un nom unique codé en chaîne peut rejeter l’entrée non valide précédemment acceptée ou l’encoder différemment sur les systèmes non Windows. Cela s’aligne sur les spécifications d’encodage et le comportement Windows.
Comportement précédent
Les versions précédentes de .NET sur les systèmes non-Windows ont autorisé des noms uniques incorrects ou les ont codés de manière non autorisée par les règles d’encodage X.520. L’indicateur X500DistinguishedNameFlags.ForceUTF8Encoding a forcé les composants à utiliser un UTF8String même s’il n’était pas une représentation valide.
Nouveau comportement
À compter de .NET 10, les composants qui enfreignent les règles d’encodage génèrent une CryptographicException dans les systèmes non Windows, harmonisant ainsi le comportement avec Windows. L’indicateur X500DistinguishedNameFlags.ForceUTF8Encoding n’encode que les composants UTF-8 lorsqu’ils sont autorisés.
Version introduite
.NET 10 Preview 1
Type de changement cassant
Ce changement est un changement comportemental .
Raison de la modification
Différents composants X.500 ont des règles d’encodage spécifiques. Par exemple, id-at-telephoneNumber
doit être encodé comme PrintableString dans ASN.1. Le caractère de point d’exclamation n’est pas valide pour un PrintableString. Considérez le code suivant :
new X500DistinguishedName("Phone=!!");
Ce code a généré une exception dans Windows, mais a été encodé comme UTF8String dans des systèmes non Windows. De même, l’utilisation de X500DistinguishedNameFlags.ForceUTF8Encoding a forcé l'encodage UTF8String, même lorsque ce n’est pas autorisé.
new X500DistinguishedName("Phone=000-555-1234", X500DistinguishedNameFlags.ForceUTF8Encoding);
Cette modification garantit que l’encodage s’aligne sur les spécifications et le comportement de Windows.
Action recommandée
En règle générale, aucune action n’est nécessaire, sauf si la compatibilité avec l’encodage incorrect est requise. Utilisez System.Security.Cryptography.X509Certificates.X500DistinguishedNameBuilder pour créer des instances avec encodage souhaité :
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();