检查Windows 10中智能卡私钥的可访问性

时间:2018-01-23 21:55:26

标签: c# .net smartcard

因此Windows改变了它在Windows 10中处理智能卡的方式。我有一个应用程序可以记住用户登录到Web应用程序的最后一个选定证书。如果插入了智能卡,我们会给用户

X509Certificate2UI.SelectFromCollection  

通过使用私钥的CspKeyContainerInfo.Accessible值扫描个人商店的证书来构建一个集合。

虽然从技术上讲,一切仍然有效,但只要Windows 10尝试查看私钥是否可用,它就会提示用户“插入正确的智能卡”。

因此,每当用户获得新的智能卡或在本地登录时,他们必须经过一些丑陋的提示并单击取消,直到他们获得正确的证书选择器。

目前,检查硬件令牌是否可用的代码如下所示:

    public static bool IsCertificateAvailable(X509Certificate2 cert)
    {
        try
        {
            AsymmetricAlgorithm akeyInfo = cert.PrivateKey;
            ICspAsymmetricAlgorithm keyInfo = akeyInfo as ICspAsymmetricAlgorithm;
            if (keyInfo.CspKeyContainerInfo.Accessible)
            {
                Logger.Log(LogLevel.Info, "Certificate {0} has a private key", cert.GetSerialNumberString());
                return true;
            }
            else //has no private key
            {
                Logger.Log(LogLevel.Info, "Certificate {0} has no private key", cert.GetSerialNumberString());
                return false;
            }
        }
        catch (CryptographicException)
        {
            return false; 
        }
    }

有没有办法在用户不必点击取消的情况下完成相同的任务?

0 个答案:

没有答案