我可以枚举插入的智能卡上的证书,但即使没有插入智能卡,如何判断Windows证书存储中的证书是否与智能卡相关?
如果没有智能卡,商店的证书在使用之前是否会要求输入个人识别码?
答案 0 :(得分:2)
如果您拥有证书和关联的私钥(作为X509Certificate2
对象),则可以检查certificate.PrivateKey.CspKeyContainerInfo.HardwareDevice
属性链(HardwareDevice属性)。如果属性返回true
,则密钥存储在智能卡上,当您尝试访问密钥时,很可能(但不是必需的)会提示PIN。如果密钥存储在传统加密服务提供程序(CSP)中,则此方法将起作用。
现代卡支持称为密钥存储提供程序(KSP)的现代提供程序类型,这在.NET中得不到很好的支持。这意味着如果密钥存储在硬件KSP中,则HasPrivateKey
属性(X509Certificate2
对象的)将返回True
,PrivateKey
将为null
。在这种情况下,您必须通过在NCrypt系列中调用本机CryptoAPI函数来完成一些额外的工作。但是,从.NET 4.6+开始,X509Certificate2
类中有几种扩展方法可用于检索提供者信息:X509Certificate2 Extension Methods。