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

标签 c# .net x509certificate ssl x509

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

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

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

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

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

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/

相关文章:

C# 从 HTTPS URL 中获取服务器证书抛出 System.PlatformNotSupportedException 异常

c# - 为什么没有用于 C# 应用程序开发的开源框架(如 Java)?

c# - 当我将 visible 正确设置为 true 时,如何防止我的 C# winforms 应用程序窃取焦点?

c# - WinForms 鼠标捕获

c# - 是否有通过一组库代码 (.net C#) 查找冗余的工具?

c++ - 跨平台 C++ 工具链

c# - 将 New Relic 的自定义检测添加到 Windows 中的后台进程

c# - 在 Windows Universal App 中检测当前设备

java - 如何使用x509证书生成数字签名?

android - 在 keystore 中使用证书保存私钥 - Android