2010-08-20 28 views
4

使用winform應用程序並連接到套接字,我能夠創建SSLStream並進行身份驗證。使用以下代碼在客戶端檢查已安裝的SSL證書

// Authenticate ourself as a client. 
        this.sslStream.AuthenticateAsClient(SSL_TARGET_HOST); 

現在有時應用程序拋出AuthenticationException,如果在客戶機證書沒有安裝。

我想知道在調用連接之前是否有辦法檢查客戶端計算機上是否安裝了特定證書?

+0

爲什麼不直接使用的例外,因爲你的指示,證書不可信?在SSL中,您甚至在握手開始之前都不會看到服務器證書,此時防止發生異常爲時已晚。 – 2010-08-21 15:05:36

回答

3

您可以使用X509Store類來確定在特定證書存儲區中安裝了哪些證書。您可以通過多種方式查找證書(例如主題名稱,發行者姓名,序列號等)。

例如,打開當前用戶的個人存儲和主題名稱搜索證書:

X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine); 

try 
{ 
    store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); 

    X509Certificate2Collection foundCerts = store.Certificates.Find(X509FindType.FindBySubjectName, "MY CERTIFICATE SUJECT NAME", true); 

    if (foundCerts.Count == 0) 
    { 
     // Cert not found 
    } 
    else 
    { 
     X509Certificate2 cert = foundCerts[0]; // Get first matching certificate 
    } 
} 
finally 
{ 
    store.Close(); 
}