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

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

(注意:Subject属性包含域名,但位于“CN = ...,S = ...”等格式的字符串内。)

另请参阅:How to extract CN from X509Certificate in Java?(向Java提出类似问题,但在这些答案中找不到适用于.NET的类似类。)

(对尤金的回答。)
我已经尝试过了...

var cert2 = new System.Security.Cryptography.X509Certificates.X509Certificate2();
cert2.Import(certificate.GetRawCertData());

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

最佳答案

我已经通过以下方式做到了:

var cert2 = new X509Certificate2(cert);
string hostName = cert2.GetNameInfo(X509NameType.DnsName, false);

您还可以检查证书是否有效:
bool valid = cert2.Verify();

(有关X509Certificate2类的说明,请参见this question)

关于c# - 在SslStream.AuthenticateAsClient期间如何从X509Certificate对象中提取域名? (.NET4),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8415504/

10-10 15:14