在CryptoServiceProvider中加载智能卡或其他私人证书以进行签名 [英] Load a smart card or other private certificate in CryptoServiceProvider for signature

查看:160
本文介绍了在CryptoServiceProvider中加载智能卡或其他私人证书以进行签名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试开发一个简单的C#签名API,以供Web内部网过程使用。
此签名API必须允许连接到Web应用程序的主题使用其证书(在智能卡或USB记忆棒上)对文档(PDF文件)进行签名。

I'm trying to develop a simple C# signature API to be used by a web intranet procedure. This signature API must allow a subject connected to the web application to use his certificate (on a smart card or on a USB stick) to sign a document (a PDF file).

当我尝试按照此处的建议初始化RSACryptoServiceProvider时: http://msdn.microsoft.com/en-us/library/ms229931.aspx

When I try to initialize an RSACryptoServiceProvider as suggested here: http://msdn.microsoft.com/en-us/library/ms229931.aspx:

// Create a new CspParameters object that identifies a  
// Smart Card CryptoGraphic Provider. 
// The 1st parameter comes from
// HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider Types.
// The 2nd parameter comes from
// HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider. 
CspParameters csp = new CspParameters(1, "Schlumberger Cryptographic Service Provider");
csp.Flags = CspProviderFlags.UseDefaultKeyContainer;
// Initialize an RSACryptoServiceProvider object using 
// the CspParameters object.
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp);

我收到了CryptographicException:

I get a CryptographicException:

keyset does not exist

我看着<$下的Windows注册表c $ c> HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider ,但未找到任何智能卡提供商。

我正在使用Dell Latitude使用读卡器并安装了所有驱动程序(我想是...)。

所以我的问题是:

I looked at the windows registry under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider and did not find any smart card provider.
I'm using a Dell Latitude with a card reader and installed all the drivers (I think so...).
So my questions are:


  • 参数中指定的提供者是用于读取器还是用于读取卡,或者两者都使用?

  • 是否存在通用的通用智能卡CSP,或者应该随同它一起提供?智能卡?

  • 我可以使用其他类型的证书(例如,存储在磁盘或USB记忆棒上的CA签名或自签名证书)吗?

推荐答案


  • 参数中指定的提供程序用于

  • 使用CSP。 CSP可以处理硬件设备,但也可以使用存储在软件商店中的私钥来处理加密操作,例如Microsoft增强加密提供程序。


    • 是否有通用的通用智能卡CSP或应该随智能卡一起提供?

    通常与智能卡中间件一起提供。这些天来,您经常会发现中间件安装了SmartCard Minidriver。这些微型驱动程序由Microsoft基本智能卡加密提供程序使用。另一个选择是中间件将安装全新的CSP。


    • 是否可以使用其他类型的证书(例如,存储在磁盘或USB记忆棒上的CA签名或自签名证书)?

    您可以使用X509Certificate2类加载PKCS#12文件。然后将其PrivateKey属性转换为RSACryptoServiceProvider。

    确定,现在到您引用的代码。此代码将使用给定的CSP在默认容器中找到第一个私钥。您不知道找到了什么钥匙。您不知道此密钥属于什么证书。看看这个SO答案

    OK, now to the code that you referenced. This code will find first private key in default container using given CSP. You don't know what key has been found. You don't know what certificate does this key belong to. Look at this SO Answer.

    我建议实施使用 X509Certificate2UI.SelectFromCollection方法。如果用户不希望您使用商店中可用的证书,而是想使用USB记忆棒上的证书,则可以给他选择文件的选项,然后使用 X509Certificate2类。现在您已经选择了X509Certificate2(在两种情况下都以X509Certificate2结尾)将其PrivateKey属性转换为RSACryptoServiceProvider。

    I would suggest to implement basic certificate selection using X509Certificate2UI.SelectFromCollection Method. If the user does not want to you certificate available in store but instead wants to use a certificate on USB stick than give him the option to select a file and use X509Certificate2 class. Now that you have X509Certificate2 selected (in both cases you end up with X509Certificate2) cast its PrivateKey property to RSACryptoServiceProvider.

    这篇关于在CryptoServiceProvider中加载智能卡或其他私人证书以进行签名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆