0

なぜそれが起こっているのか理解できないという非常に奇妙な問題が発生しています。

クライアントとサーバーがあります。2 つのアプリケーションは、SOAP Web サービスを介して通信します。サーバーと通信できるようになる前に、クライアントはサーバーの Web サイトに登録し、デジタル証明書をアップロードする必要があります。サーバーはデジタル証明書をデータベースに保存します。

クライアントが Web サービス呼び出しを行うとき、ベンダーの Web サイトにアップロードしたデジタル証明書の秘密鍵を使用して連結された詳細のデジタル署名と共に詳細を送信します。

次に、クライアントは詳細とデジタル署名をサーバーに送信します。サーバーはクライアントを識別し、データベースからクライアントの証明書を取得し、デジタル署名を検証するために公開鍵を抽出します。

奇妙な点の 1 つは、両側の公開鍵がまったく同じであることです。

もう 1 つの奇妙な点は、サーバー上で、データベースから証明書を取得する代わりに、証明書ストアから証明書を取得するようにコードを変更すると (クライアントで行ったのとまったく同じように)、デジタル署名が正しく一致します。

何が悪いのか本当にわかりません。誰か助けてくれませんか?大変ありがたく存じます。

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 に答える