注册使用与ASP.NET,Windows身份验证和模拟智能卡的私钥数据(Sign data usin

2019-08-31 19:35发布

我想知道是否可以使用智能卡的私钥, 而不诉诸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;

        }

我试着给应用程序池的身份访问证书存储无济于事。

Answer 1:

这是不可能的使用用户的私钥的服务器上。 这将有效地抵消使用智能卡的好处。 事实上,安全操作都将在智能卡执行。

策略支持智能卡

微软将智能卡作为其公共密钥基础设施(PKI)支持的一个关键组成部分。 智能卡增强纯软件的解决方案,如客户身份验证,交互式登录和安全电子邮件。 智能卡是收敛的,因为他们公钥证书和相关密钥点:

  • 为保护私钥和其他形式的个人信息防篡改存储。
  • 隔离系统的其他部分包括身份验证,数字签名和密钥交换安全关键计算。
  • 启用凭证和工作计算机之间的其他私人信息的可移植性,在家里,或为移动用户。

来源: 智能卡概念

正如你所看到的,一个重要方面是从系统的其余部分隔离的安全关键操作。 执行与用户的私钥加密的唯一方法就是使用智能卡读卡器(硬件本身)。 由于没有办法从服务器端ASP.NET网页,你尝试做访问客户端的硬件是不可能的。

实现这一目标的唯一方法是使用客户端组件。



Answer 2:

你可以先试试这个:

store.Open(OpenFlags.ReadOnly);
cert = store.Certificates[0];
store.Close();


Answer 3:

你得到拒绝访问的原因是因为你试图访问私钥,并没有通过PIN到卡上。 (我相信)

私钥功能需要PIN。 还..你需要使用winscard.dll获取卡的上下文

你可以看看这个。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa379886(v=vs.85).aspx

你还需要使用智能卡CSP .. Windows有7个原生一个以上的所谓的智能卡微型驱动程序。

我试图同样的事情......如果我得到更多,我会回发一个样本...



文章来源: Sign data using smart card's private key with ASP.NET, Windows Authentication, and Impersonation