问题描述
用户已经有了X.509数字证书,安装在USBKEY里。现在我想实现使用UKEY登录自己开发的应用程序,实现身份认证。我想身份认证过程实际是用户证明自己拥有私钥的过程,大致可以用读到的公钥对某个信息加密,然后调用用户私钥解密,这个过程中UKEY驱动会自动接管调用私钥解密过程,确保私钥不出UKEY。使用C#自带的库可以枚举用户的证书,并读出其中的内容。问题是这些操作并不需要用到私钥,也就不会用到用户的PIN码。光能读出这些只能证明用户在说他自己是谁,没法证明他就是。那自己写的程序如何才能通过数字证书验证用户的身份呢?我感觉应该有标准机制来验证用户身份的吧?期待示例代码。
解决方案
解决方案二:
自己做。多数UKEY支持CSP接口。问题出来了,使用正确的CSP名称初始化provider时,提示密钥集不存在。但事实上初始化的时候根本没有指定密钥集。而有时候却可以成功。
解决方案三:
问题已解决。初始化提示没有指定密钥集是因为默认是交换密钥,手工指定为签名密钥就好了。这个方法不好,因为要找到具体的密钥容器需要读取注册表,使用默认容器的话要求电脑上只插了这一个UKEY。相关代码:CspParameterscsp=newCspParameters(1,ProviderName);csp.Flags=CspProviderFlags.UseDefaultKeyContainer;csp.KeyNumber=2;//指定为签名密钥RSACryptoServiceProviderrsa=newRSACryptoServiceProvider(csp);...
解决方案四:
最近我也在写一个这样的UKEY认证,能给我看看你怎么写的吗?
时间: 2024-09-13 16:36:29