我可以通过X509Certificate2
属性从Subject
获取完整的主题字符串,但是有什么方法可以从主题字符串中获取特定的值(例如,仅O = "Stack Exchange, Inc."
)? SubjectName
属性看起来很有希望,但似乎只包含更多将整个主题转储为字符串的方式。
答案 0 :(得分:2)
不,您不能,X509Certificate2
除了Subject
之外没有其他属性来获取所需的信息。
但是,如果您确实需要将 Organization 名称分开, 您可以通过简单的regex匹配就可以拥有它:
var organization = Regex.Match(certificate.Subject, @"O\s?=(.*)\s").Groups[1].ToString();
答案 1 :(得分:0)
在Portable.BouncyCastle库(可用的via NuGet)中,有一个X509Name类,您可以执行以下操作:
using Org.BouncyCastle.Asn1.X509;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
...
X509Certificate2 certificate = ...
var name = new X509Name(certificate.Subject);
var organization = name
.GetValueList(X509Name.O)
.OfType<string>()
.FirstOrDefault();