如何确定商店中的证书是不是与智能卡相关?
Posted
技术标签:
【中文标题】如何确定商店中的证书是不是与智能卡相关?【英文标题】:How to decide that a certificate in the store is smart card related or not?如何确定商店中的证书是否与智能卡相关? 【发布时间】:2016-04-04 11:32:28 【问题描述】:我可以枚举插入的智能卡上存在的证书,但是即使没有插入智能卡,如何确定 Windows 证书存储中存在的证书与智能卡相关?
如果没有智能卡,我如何知道来自商店的证书在使用前是否会要求输入 PIN?
【问题讨论】:
【参考方案1】:如果您有证书和关联的私钥(作为X509Certificate2
对象),您可以检查certificate.PrivateKey.CspKeyContainerInfo.HardwareDevice
属性链(HardwareDevice 属性)。如果属性返回true
,则密钥存储在智能卡上,并且很可能(但不是必需的)在您尝试访问密钥时提示 PIN。如果密钥存储在旧版加密服务提供程序 (CSP) 中,这将起作用。
现代卡支持称为密钥存储提供程序 (KSP) 的现代提供程序类型,在 .NET 中的支持很差。这意味着如果密钥存储在硬件 KSP 中,那么(X509Certificate2
对象的)HasPrivateKey
属性将返回True
,而PrivateKey
将是null
。在这种情况下,您将不得不通过调用 NCrypt 系列中的本机 CryptoAPI 函数来做一些额外的工作。不过,从 .NET 4.6+ 开始,X509Certificate2
类中有几个扩展方法可用于检索提供程序信息:X509Certificate2 Extension Methods。
【讨论】:
以上是关于如何确定商店中的证书是不是与智能卡相关?的主要内容,如果未能解决你的问题,请参考以下文章