2010-08-20 77 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(); 
}