我想知道是否可以使用智能卡私钥对数据进行签名without求助于 java applet 或 activex 控件。
我已经非常接近了!
我们的环境是:
我使用以下命令构建了一个简单的 ASP.NET (.net 4.0) Web 表单应用程序:
通过读卡器中的智能卡,我可以轻松枚举登录用户的智能卡 (StoreLocation.CurrentUser) 上的证书。但是,当我尝试访问私钥(通过 CSP)时,收到“访问被拒绝”错误。
在我的本地计算机上的调试模式下,一切正常。我知道——这是陈词滥调。
protected void Page_Load(object sender, EventArgs e)
{
//always populate the cert store
store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.MaxAllowed);
RSACryptoServiceProvider csp = new RSACryptoServiceProvider();
//hardcoded to get the first cert in the store - it's legit and had a private key
cert = store.Certificates[0];
//throws error when not local
csp = (RSACryptoServiceProvider)cert.PrivateKey;
}
我尝试授予应用程序池身份访问证书存储的权限,但无济于事。
无法在服务器上使用用户的私钥。这将有效抵消使用智能卡的好处。事实上,安全操作将在智能卡上执行。
支持智能卡的策略
Microsoft 将智能卡视为其公钥基础设施 (PKI) 支持的关键组件。智能卡增强了纯软件解决方案,例如客户端身份验证、交互式登录和安全电子邮件。智能卡是公钥证书和关联密钥的汇聚点,因为它们:
- 提供防篡改存储以保护私钥和
其他形式的个人信息。
- 隔离涉及身份验证的安全关键计算,
数字签名以及来自系统其他部分的密钥交换。
- 实现凭证和其他私人信息的可移植性
在工作、家庭或移动用户的计算机之间。
Source: 智能卡概念
正如您所看到的,一个关键方面是将安全关键操作与系统的其余部分隔离。使用用户私钥执行加密的唯一方法是使用智能卡读卡器(硬件本身)。由于无法从服务器端 ASP.NET 网页访问客户端的硬件,因此您尝试执行的操作是不可能的。
实现此目的的唯一方法是使用客户端组件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)