다음을 통해 공유


X500DistinguishedName 유효성 검사가 더 엄격합니다.

.NET 10부터 문자열로 인코딩된 고유 이름을 허용하는 X500DistinguishedName 생성자는 이전에 허용된 잘못된 입력을 거부하거나 비 Windows 시스템에서 다르게 인코딩할 수 있습니다. 이는 인코딩 사양 및 Windows 동작과 일치합니다.

이전 동작

Windows가 아닌 시스템의 이전 버전의 .NET에서는 잘못된 고유 이름을 허용하거나 X.520 인코딩 규칙에서 허용하지 않는 방식으로 인코딩했습니다. X500DistinguishedNameFlags.ForceUTF8Encoding 플래그는 구성 요소가 유효한 표현이 아니더라도 UTF8String을 사용하도록 강제했습니다.

새 동작

.NET 10부터 인코딩 규칙을 위반하는 구성 요소는 Windows가 아닌 시스템에서 Windows 동작과 일치하는 CryptographicException을 발생시킵니다. X500DistinguishedNameFlags.ForceUTF8Encoding 플래그는 허용되는 경우 UTF-8만 구성 요소를 인코딩합니다.

도입된 버전

.NET 10 미리 보기 1

호환성이 손상되는 변경 유형

이 변경은 행동 변화입니다.

변경 이유

다른 X.500 구성 요소에는 특정 인코딩 규칙이 있습니다. 예를 들어 id-at-telephoneNumber은/는 ASN.1로 PrintableString형식으로 인코딩되어야 합니다. PrintableString에 느낌표 문자가 잘못되었습니다. 다음 코드를 고려합니다.

new X500DistinguishedName("Phone=!!");

이 코드는 Windows에서 예외를 throw했지만, Windows가 아닌 시스템에서는 UTF8String으로 인코딩되었습니다. 마찬가지로 X500DistinguishedNameFlags.ForceUTF8Encoding 강제 UTF8String 인코딩을 사용하는 것은 허용되지 않는 경우에도 마찬가지입니다.

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

이렇게 변경하면 인코딩이 사양 및 Windows 동작에 맞게 조정됩니다.

일반적으로 잘못된 인코딩과의 호환성이 필요하지 않으면 작업이 필요하지 않습니다. System.Security.Cryptography.X509Certificates.X500DistinguishedNameBuilder 사용하여 원하는 인코딩을 사용하여 인스턴스를 만듭니다.

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