使用 C# 从证书签名请求 (CSR) 中读取电子邮件字段

Reading email field from a certificate signing request (CSR) with C#

我正在使用以下代码读取 CSR 的属性:

string csr = myCSR;
CX509CertificateRequestPkcs10 request = new CX509CertificateRequestPkcs10();
request.InitializeDecode(csr, EncodingType.XCN_CRYPT_STRING_BASE64_ANY);
request.CheckSignature();
string tmp = ReadDnsSan(request);
string attribs = (((CX500DistinguishedName)request.Subject).Name);

在属性中我得到通用名称、组织、部门、城市、国家,但没有电子邮件地址

CSR 不应该是强制性的吗? 有没有办法用 C# 读取它?

in attribs I get common name, organization, department

您的方向是正确的,但电子邮件 RDN 属性似乎未显示在主题字段中。

Shouldn't be mandatory for a CSR?

没有。此外,整个主题字段是可选的。因此,您可能需要相应地修改您的代码。可能会出现Subject 字段为空的情况,此时Subject Alternative Names 扩展中会显示主题信息。

因此,如果主题字符串中缺少 E=Email= 属性,则该属性不会出现在此处。