Freigeben über


Die X500DistinguishedName-Überprüfung ist strenger

Ab .NET 10 kann der X500DistinguishedName-Konstruktor, der einen als Zeichenfolge codierten Distinguished Name akzeptiert, zuvor akzeptierte ungültige Eingaben ablehnen oder unter Nicht-Windows-Systemen anders codieren. Dies entspricht den Codierungsspezifikationen und dem Windows-Verhalten.

Vorheriges Verhalten

Frühere Versionen von .NET auf Nicht-Windows-Systemen erlaubten falsche distinguished Names oder codierte sie auf eine Weise, die von X.520-Codierungsregeln nicht zulässig ist. Das X500DistinguishedNameFlags.ForceUTF8Encoding-Flag erzwang, dass Komponenten eine UTF8-Zeichenfolge verwendeten, selbst wenn dies keine gültige Darstellung war.

Neues Verhalten

Ab .NET 10 lösen Komponenten, die gegen Codierungsregeln verstoßen, eine CryptographicException auf Nicht-Windows-Systemen aus und entsprechen dem Windows-Verhalten. Die X500DistinguishedNameFlags.ForceUTF8Encoding-Flags codieren Komponenten nur mit UTF-8, wenn möglich.

Eingeführt in Version

.NET 10

Typ des Breaking Changes

Diese Änderung ist eine Verhaltensänderung.

Grund für Änderung

Verschiedene X.500-Komponenten weisen spezifische Codierungsregeln auf. Beispielsweise muss id-at-telephoneNumber als ASN.1-PrintableStringcodiert werden. Das Ausrufezeichen ist für einen druckbaren Zeichenstring ungültig. Beachten Sie den folgenden Code:

new X500DistinguishedName("Phone=!!");

Dieser Code hat eine Ausnahme unter Windows ausgelöst, wurde jedoch als UTF8String unter Nicht-Windows codiert. Ebenso erzwang die Verwendung von X500DistinguishedNameFlags.ForceUTF8Encoding die UTF8String-Codierung, auch wenn diese nicht zulässig war:

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

Diese Änderung stellt sicher, dass die Codierung an Spezifikationen und Windows-Verhalten ausgerichtet ist.

Im Allgemeinen ist keine Aktion erforderlich, es sei denn, die Kompatibilität mit der falschen Codierung ist erforderlich. Verwenden Sie System.Security.Cryptography.X509Certificates.X500DistinguishedNameBuilder, um Instanzen mit der gewünschten Codierung zu erstellen:

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

Betroffene APIs