C#智能卡在终端上工作

时间:2016-08-09 10:43:55

标签: c# x509 x509certificate2

我编写了这段代码,当我们在智能卡插入的同一台PC上运行应用程序时,它的工作非常完美。

但是当我的应用程序在终端上运行并且用户将智能卡连接到他自己的PC时,我需要怎么做才能运行此代码。

在终端会话中,我允许使用智能卡作为终端。

用户可以看到此证书,但是当选择此证书时,我收到有关没有私钥的错误..

如何在远程PC上使用智能卡?

private X509Certificate2 LetUserChooseCertificate()
{
        X509Certificate2 cert = null;

        try
        {
            // Open the store of personal certificates.
            X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);//StoreName.My  StoreLocation.CurrentUser
            //X509Store store = new X509Store("addressbook", StoreLocation.CurrentUser);
            store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

            X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
            X509Certificate2Collection fcollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
            X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection, "Signing", "Choose cert", X509SelectionFlag.SingleSelection);

            if (scollection != null && scollection.Count == 1)
            {
                cert = scollection[0];                 
                if (cert.HasPrivateKey == false)
                {
                    //MessageBox.Show("This certificate does not have a private key associated with it");
                    //cert = null; 
                }
            }

            store.Close();
        }
        catch (Exception)
        {
            //MessageBox.Show("Unable to get the private key");
            //cert = null;
        }

        return cert;
}

0 个答案:

没有答案