La convalida X500DistinguishedName è più restrittiva
A partire da .NET 10, il costruttore X500DistinguishedName che accetta un nome distinto con codifica stringa potrebbe rifiutare l'input non valido accettato in precedenza o codificarlo in modo diverso nei sistemi non Windows. Questo comportamento è allineato alle specifiche di codifica e al comportamento di Windows.
Comportamento precedente
Le versioni precedenti di .NET in sistemi non Windows hanno consentito nomi distinti non corretti o codificati in modo non consentito dalle regole di codifica X.520. Il flag X500DistinguishedNameFlags.ForceUTF8Encoding costringeva i componenti a utilizzare un UTF8String anche se non era una rappresentazione valida.
Nuovo comportamento
A partire da .NET 10, i componenti che violano le regole di codifica generano un CryptographicException nei sistemi non Windows, che corrispondono al comportamento di Windows. Il flag X500DistinguishedNameFlags.ForceUTF8Encoding codifica solo i componenti UTF-8 quando consentiti.
Versione introdotta
.NET 10 Preview 1
Tipo di modifica che causa un'interruzione
Questa modifica è una modifica comportamentale .
Motivo della modifica
I componenti X.500 diversi hanno regole di codifica specifiche. Ad esempio, id-at-telephoneNumber
deve essere codificato come asn.1 PrintableString. Il carattere punto esclamativo non è valido per printableString. Si consideri il codice seguente:
new X500DistinguishedName("Phone=!!");
Questo codice ha generato un'eccezione in Windows, ma è stato codificato come UTF8String in non Windows. Analogamente, l'uso di X500DistinguishedNameFlags.ForceUTF8Encoding forzava la codifica UTF8String anche quando non era consentito.
new X500DistinguishedName("Phone=000-555-1234", X500DistinguishedNameFlags.ForceUTF8Encoding);
Questa modifica garantisce che la codifica sia allineata alle specifiche e al comportamento di Windows.
Azione consigliata
In genere, non è necessaria alcuna azione a meno che non sia necessaria la compatibilità con la codifica non corretta. Usare System.Security.Cryptography.X509Certificates.X500DistinguishedNameBuilder per creare istanze con la codifica desiderata:
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();