2013-07-01 63 views
0

我遇到一个很奇怪的问题,我简直不明白为什么会发生这种情况。从数据库中检索证书时验证数字签名

我有一个客户端和一个服务器。这两个应用程序通过SOAP Web服务进行通信。现在,在能够与服务器通信之前,客户端必须在服务器的网站上注册并上传数字证书。服务器将数字证书保存在数据库中。

当客户端进行Web服务调用时,他使用他上传到供应商网站的数字证书的私钥将详细信息连同细节的数字签名一起链接在一起。

客户端然后将详细信息和数字签名发送到服务器。服务器识别客户端,从数据库中检索他的证书并提取公钥以验证数字签名。

奇怪的是,双方的公钥是完全一样的。

另一个奇怪的是,当我在服务器上更改代码时,我不是从数据库中检索证书,而是从证书存储中检索证书(就像我在客户端中那样) ,数字签名正确匹配。

我真的不知道什么是错的。有人可以帮忙吗?我将非常感激。

回答

0

经过几个小时的调试和绝望之后,我终于找出问题所在。当我从数据库加载证书时,显然它不允许程序访问公钥。

出于这个原因,我在表中添加一列用于公钥和提取的注册过程中的公共密钥并将其保存为一个XML字符串是这样的:

RSACryptoServiceProvider csp = (RSACryptoServiceProvider)cert.PublicKey.Key; 
string public_key = csp.ToXMLString(false); //to store public key only 

然后我救了它在数据库中。为了验证签名,我从数据库装载的关键,并通过它来CSP如下:

RSACryptoServiceProvider csp = new RSACryptoServiceProvider(); 
csp.FromXMLString(public_key); 

我希望这个答案可以帮助别人,因为它是非常困难的跟踪问题,我和我浪费很多时间。