Compartilhar via


A validação X500DistinguishedName é mais rigorosa

A partir do .NET 10, o construtor X500DistinguishedName que aceita um nome diferenciado codificado em cadeia de caracteres pode rejeitar a entrada inválida aceita anteriormente ou codificá-la de forma diferente em sistemas não Windows. Isso se alinha às especificações de codificação e ao comportamento do Windows.

Comportamento anterior

As versões anteriores do .NET em sistemas não Windows permitiam nomes diferenciados incorretos ou os codificavam de forma não permitida pelas regras de codificação X.520. A bandeira X500DistinguishedNameFlags.ForceUTF8Encoding forçou os componentes a usar um UTF8String, mesmo que não fosse uma representação válida.

Novo comportamento

A partir do .NET 10, componentes que violam regras de codificação lançam um CryptographicException em sistemas que não são do Windows, correspondendo ao comportamento do Windows. O sinalizador X500DistinguishedNameFlags.ForceUTF8Encoding apenas codifica componentes UTF-8 quando permitido.

Versão introduzida

.NET 10

Tipo de alteração interruptiva

Essa alteração é uma mudança comportamental .

Motivo da alteração

Diferentes componentes X.500 têm regras de codificação específicas. Por exemplo, id-at-telephoneNumber deve ser codificado como um PrintableString ASN.1. O caractere de ponto de exclamação é inválido para um PrintableString. Considere o seguinte código:

new X500DistinguishedName("Phone=!!");

Esse código gerou uma exceção no Windows, mas foi codificado como UTF8String em não Windows. De forma semelhante, usar X500DistinguishedNameFlags.ForceUTF8Encoding força a codificação UTF8String mesmo quando não permitido:

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

Essa alteração garante que a codificação esteja alinhada com as especificações e o comportamento do Windows.

Em geral, nenhuma ação é necessária, a menos que a compatibilidade com a codificação incorreta seja necessária. Use System.Security.Cryptography.X509Certificates.X500DistinguishedNameBuilder para criar instâncias com codificação desejada:

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

APIs afetadas