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

时间:2013-04-22 16:35:57

标签: asp.net .net-4.0 x509certificate smartcard

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

        }

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

3 个答案:

答案 0 :(得分:4)

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

  

支持智能卡的策略

     

Microsoft将智能卡视为其公钥基础结构(PKI)支持的关键组件。智能卡增强了纯软件解决方案,例如客户端身份验证,交互式登录和安全电子邮件。智能卡是公钥证书和相关密钥的融合点,因为它们:

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

来源:Smart Card Concepts

如您所见,一个关键方面是将安全关键操作与系统的其他部分隔离开来。使用用户私钥执行加密的唯一方法是使用智能卡读卡器(硬件本身)。由于无法从服务器端ASP.NET网页访问客户端的硬件,因此您无法尝试执行此操作。

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

答案 1 :(得分:0)

你可以先试试这个:

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

答案 2 :(得分:0)

您获得拒绝访问权限的原因是您尝试访问私钥并且尚未将PIN传递给卡。 (我相信)

私钥功能需要PIN。另外..您需要使用winscard.dll

获取卡片上下文

你可以看一下。

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

您还需要使用智能卡CSP .. Windows有一个7和7以上的本机称为智能卡迷你驱动程序。

我正在尝试同样的事情......如果我进一步发展,我会回复一个样本......