检查客户端上安装的SSL证书

时间:2010-08-20 15:42:09

标签: c# ssl-certificate

使用winform应用程序并连接到套接字,我可以创建SSLStream并进行身份验证。使用以下代码

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

现在有时应用程序抛出AuthenticationException,如果没有安装客户端机器证书。

我想知道在调用connect之前是否有办法检查客户端计算机上是否安装了特定证书?

1 个答案:

答案 0 :(得分: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();
}