在C#中,我创建了一个这样的SSL连接到服务器:如何根据证书主题验证规范名称(通用名称,cn)?
var hostname = "www.example.com";
var client = new TcpClient(hostname, 443);
var sslStream = new SslStream(client.GetStream());
sslStream.AuthenticateAsClient(hostname);
以上完成后没有抛出任何异常,我知道服务器证书已经过验证和主机名充分主题相符。主题是通过财产sslStream.RemoteCertificate.Subject
这是在DN格式的字符串,像
CN=www.example.com, O=Example Inc, L=New York, S=New York, C=US
或
CN=*.example.com, OU=Certificate Authority Validated
深奥原因无法访问,我想验证针对相同的另一个字符串(另一个主机名)证书主题。如何正确验证某个特定主机名是否与证书的主题匹配?
您的另一个意见表明您可能没有意识到http://referencesource.microsoft.com/ - 我无法确切知道您希望在哪个类中找到.NET CLR实现,但如果它存在,它应该在那里可用。 – 2014-10-23 11:27:09
@TomW谢谢你!不,我不知道...重要的是要注意许可条款的不同 - 单声道中的特定文件是MIT许可的,而MS参考源是MS-RSL,这是限制性更强的。此外,显然你只能通过某些程序集的.Net参考源 - 其中不包括System.Net.Security - 并且我一直无法找到MS参考代码的相关部分。 – 2014-10-23 13:02:23
>解析主题字符串已被弃用,因为至少2000年编写RFC2818时,赞成subjectAltName.dNSName 我不同意,因为SAN不是必需的,因此您仍然必须解析主题字段。 – Crypt32 2014-10-27 12:03:16