如何在SslStream.AuthenticateAsClient期间从X509Certificate对象中提取域名?(.NET4)

bil*_*lpg 12 .net c# ssl x509certificate x509

我有一个由SslStream.AuthenticateAsClient调用的RemoteCertificateValidationCallback函数,该函数传递给X509Certificate对象.

我想从该证书中提取名称,这样,如果我将该字符串传递给AuthenticateAsClient,它就会通过.(假设没有其他问题.)

(注意:Subject属性包含域名,但它位于"CN = ...,S = ..."等格式化字符串中.)

另请参见:如何从Java中的X509Certificate中提取CN?(问一个类似的Java问题,但我找不到那些答案中提到的类似.NET的类.)

(跟随Eugene的回答.)
我试过这个......

var cert2 = new System.Security.Cryptography.X509Certificates.X509Certificate2();
cert2.Import(certificate.GetRawCertData());
Run Code Online (Sandbox Code Playgroud)

...但是cert2.SubjectName.Name仍然具有CN = etc格式.我做错了吗?

IMi*_*Mil 28

我是通过以下方式完成的:

var cert2 = new X509Certificate2(cert);
string hostName = cert2.GetNameInfo(X509NameType.DnsName, false);
Run Code Online (Sandbox Code Playgroud)

您还可以检查证书是否有效:

bool valid = cert2.Verify();
Run Code Online (Sandbox Code Playgroud)

(有关X509Certificate2类的说明,请参阅此问题)