在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