Condividi tramite


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.

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

API interessate