>我正在使用来自C# System.Security.Cryptography的X509Certificate2,该证书由我的证书颁发机构从证书请求中签名。此证书请求是使用应同时具有 CN(公用名(和 UID(用户 ID(的 X500 可分辨名称构建的。
但是,当我尝试使用可分辨名称字符串创建 X500Distinguished Name"为"UID=123,CN=name"时,出现错误"字符串包含无效的 X500 名称、属性键、OID、值或分隔符"。但我想问题是 UID 字段,因为当使用可分辨名称字符串作为"O=123,CN=name"时,它可以工作。
我发现和提到的旧问题当时是不可能的(带有主题 UID 的 X509 证书(,但也许现在已经可以了。
有谁知道如何在 c# 中使用 UID 字段设置可分辨名称?
谢谢 大卫·科斯塔
UID 可以使用其 OID (0.9.2342.19200300.100.1.1( 指定:
var subject = new X500DistinguishedName("CN=123,OID.0.9.2342.19200300.100.1.1=321");
它生成正确的 ASN.1 结构,其中包含用户标识符。要验证它,您可以获取subject.RawData
,转换为base64并粘贴到任何ASN.1查看器。
RDN 属性具有自己的对象标识符 (OID( 和值。请注意,名称别名(如 CN、UID 等(不会存储在生成的 ASN.1 中。因此,如何表示(或打印(不同的 OID 取决于实现。
.NET Framework的X500DistinguishedName
实现执行对crypt32的调用.dll以编码/解码可分辨名称,但是crypt32.dll不知道像UID这样不太流行的名称别名。
值得注意的是,某些 CA 可能也不支持 UID,因此它们可能会注册没有 UID 属性的证书,即使它最初在 CSR 中也是如此。