.NET 5:X509Certificate.GetNameInfo 大写 unicode 转义字符

.NET 5: X509Certificate.GetNameInfo Uppercases unicode escape characters

我已经用谷歌搜索了几个小时,但找不到任何东西。 所以,我有一个证书,其主题的简单名称中包含“ОАО”(俄语字母)。 我使用此代码获得此值:

var x509 = new X509Certificate2(certificateBytes);
var subjectName = x509.GetNameInfo(X509NameType.SimpleName, forIssuer: false);

在 Windows 上,此代码 returns 'ОАО' 将保存到 MS SQL。
但是在 Docker 容器中的 Linux 上,此代码 returns 转义了 unicode 字符, 但大写。
他们在这里:

\U041E\U0410\U041E

而不是:

\u041E\u0410\u041E

并且将保存此上限而不是“ОАО”。所以当我什么都不做时,它是 \U1234 并且它按原样写入数据库:字面意思是 \U1234。但是当我执行 .ToLower() 转换时,此代码转换为 \u1234 并被识别为“ОАО”。 所以我想出了一个 hack,但我不确定这是正确的做法。无论如何,这确实将我的文本保存为数据库中的“ОАО”:

var subjectName = Regex.Unescape(x509.GetNameInfo(X509NameType.SimpleName, forIssuer: false).ToLowerInvariant());

你怎么看?这是一个错误吗?为什么这个方法会这样?为什么它 'capses' unicode escape /u-character? 这是解决问题的正确方法吗? 我会遇到这样的情况,我会发现一些 unicode 区分大小写的字符,在这种情况下我可能会丢失这些字符或者它们不区分大小写吗?

Is this a bug?

是的,这是一个错误,已经 fixed in .NET 6 RC2(尚未发布,但是是 .NET 6 预览版的下一个版本)。

使用 OpenSSL 的 Linux 实现无意中转义了非 ASCII 文本。