0

序文: HTTP 応答で XML 署名検証を行おうとしていますが、助けが必要です! すべてのコードは、C# を使用した .NET 4.0 です。


だからここに私が達成しようとしていることがあります:

  1. サーバー上で署名付き XML ドキュメントを作成する
  2. 署名された XML を HTTP 応答の本文として送信する
  3. クライアントは応答を受け取り、署名が有効であることを確認します。

サーバー側では、XML を作成して XmlDocument に読み込みます。次に、この XmlDocument オブジェクトに署名し ( MSDN のサンプル コードを使用)、この署名済み XML から文字列を作成します。この文字列は、HTTP 応答本文として送信するものです。

クライアント アプリケーションが応答を受信すると、応答の本文を取り出して署名検証関数に渡します。この関数は、文字列から XmlDocument を作成し、XmlDocument から SignedXml オブジェクトを作成し、署名を取得して検証します。このコードのほとんどは、MSDN からも引用されています (こちら)。

簡単そうですよね?私の検証は毎回失敗します。署名/検証コードの問題ではないことはわかっています。ロードする XML がファイルからのものである別のアプリでテストしましたが、完全に機能します。私はまったく同じ XML を使用して、クライアント/サーバー コードをテストしています。

したがって、問題は XmlDocument が文字列に変換されるか、文字列が XmlDocument に変換されるステップにあると思います。

XmlDocument ->文字列-> XmlDocument

署名の検証を容易にするために、次のことを行いました。

  1. XmlDocument を作成する前に、すべてのタブ、改行、キャリッジ リターンを XML から削除します。
  2. ドキュメントのエンコーディングが明示的に UTF-8 に設定されていることを確認しました (以前のスレッドから、設定しないと問題が発生する可能性があることがわかっています)。
  3. 2つの異なる方法で文字列を生成しようとしました(XmlDocumentのOuterXMLから、またXmlWriterとStringWriterを使用して)。
  4. サーバーから送信された XML が、クライアントによって読み込まれたものとまったく同じであることを視覚的に確認しました。

この問題を解決する方法について何かアイデアがあれば、助けてください! 必要に応じてコードを投稿できますが、一見の価値がある唯一のコードは、XmlDocument から文字列を生成する方法です。

4

1 に答える 1