0

我遇到了一个非常奇怪的问题,我根本无法理解它为什么会发生。

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

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

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

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

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

我真的不知道怎么了。有人可以帮忙吗?我会非常感激。

4

1 回答 1

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);

我希望这个答案对某人有所帮助,因为对我来说很难追踪问题,而且我浪费了很多时间。

于 2013-07-01T18:52:18.767 回答