如何判断商店中的证书是否与智能卡相关?

时间:2016-04-04 11:32:28

标签: c# cryptography x509certificate2

我可以枚举插入的智能卡上的证书,但即使没有插入智能卡,如何判断Windows证书存储中的证书是否与智能卡相关?

如果没有智能卡,商店的证书在使用之前是否会要求输入个人识别码?

1 个答案:

答案 0 :(得分:2)

如果您拥有证书和关联的私钥(作为X509Certificate2对象),则可以检查certificate.PrivateKey.CspKeyContainerInfo.HardwareDevice属性链(HardwareDevice属性)。如果属性返回true,则密钥存储在智能卡上,当您尝试访问密钥时,很可能(但不是必需的)会提示PIN。如果密钥存储在传统加密服务提供程序(CSP)中,则此方法将起作用。

现代卡支持称为密钥存储提供程序(KSP)的现代提供程序类型,这在.NET中得不到很好的支持。这意味着如果密钥存储在硬件KSP中,则HasPrivateKey属性(X509Certificate2对象的)将返回TruePrivateKey将为null 。在这种情况下,您必须通过在NCrypt系列中调用本机CryptoAPI函数来完成一些额外的工作。但是,从.NET 4.6+开始,X509Certificate2类中有几种扩展方法可用于检索提供者信息:X509Certificate2 Extension Methods