通过 ASP.NET、Windows 身份验证和模拟,使用智能卡的私钥对数据进行签名

2023-12-04

我想知道是否可以使用智能卡私钥对数据进行签名without求助于 java applet 或 activex 控件。

我已经非常接近了!

我们的环境是:

  • AD域
  • PKI 基础设施/智能卡 (PIV)

我使用以下命令构建了一个简单的 ASP.NET (.net 4.0) Web 表单应用程序:

  • Windows 身份验证打开,匿名关闭
  • 身份冒充

通过读卡器中的智能卡,我可以轻松枚举登录用户的智能卡 (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(使用前将#替换为@)

通过 ASP.NET、Windows 身份验证和模拟,使用智能卡的私钥对数据进行签名 的相关文章

随机推荐