我将从Windows证书存储中使用C#访问智能卡。这在许多系统上表现良好,但是在某些系统上无法正常工作。智能卡证书没有添加到个人证书中。我们需要将其存储到证书存储中才能从C#中访问它,就像这样:
X509Store store = new X509Store(StoreName.My,
StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certs =
store.Certificates.Find(X509FindType.FindByIssuerName,
issuerName, false);
系统详情:
- 操作系统:Windows Server 2003 R2 x64 SP2
- 使用的CSP是SafeSign Identity Client v3.0.11
- 系统通过Citrix ICA连接访问,Citrix Presentation Server 4.5。
可以正常工作的内容:
- 通过智能卡读卡器提供的诊断工具访问卡片(OMNIKEY 3121)
- 在Internet Explorer 7中查看个人证书(工具 > Internet选项 > 内容 > 证书)
- 基本上我们尝试的所有与该卡相关的功能都可以正常工作,除了...
无法正常工作的内容:
- 个人证书未复制到个人证书存储区(可以通过certmgr.msc进行检查)
我的猜测是,通过Citrix转发智能卡正常工作,因为我们几乎可以以所有方式访问它,但是CSP没有正确工作。然而,获得CSP的支持并不容易,因此提出了这个问题。我发现奇怪的是,证书可以通过IE7访问,这表明它们在某种Windows存储中可用。
欢迎提出进一步的建议。也许有一种不同的方式可以像IE那样访问智能卡证书吗?