2

私は解決できないように見える問題に直面しています。wcf および ws セキュリティを使用した Java ベースの Web サービスの使用。mtom 以外の要求を使用すると、公開鍵証明書がバイナリ セキュリティ要素の一部として base64 文字列として送信されます。ただし、同じ証明書は、mtom 要求に対して mtom エンコードされています。公開鍵証明書が、soap 要求エンベロープの下のマルチパート セクションとしてではなく、binarysecurityelement 内に埋め込まれた base 64 文字列として送信されるように、wcf を使用しないようにする方法はありますか?

これは、公開鍵が RSA (2048 ビット) の証明書で発生しており、公開鍵が RSA (1024 ビット) の証明書では正常に機能します。

したがって、RSA 2048 ビットの公開鍵を持つ証明書では、以下のようなことが起こっています。

<o:BinarySecurityToken u:Id="uuid-4d4ee765-5717-4d53-9ac9-99bddc07df6c-2" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">
        <xop:Include href="cid:http%3A%2F%2Ftempuri.org%2F1%2F632618206525089430" xmlns:xop="http://www.w3.org/2004/08/xop/include"/>
      </o:BinarySecurityToken>

代わりに、xop:include 要素の代わりに base64 証明書の値を埋め込む必要があります。これは、RSA 1024 ビットの公開鍵を持つ証明書に対して正しく行われます。

メッセージを書き込むためのカスタムエンコーダーも用意していますが、リクエストでバイナリセキュリティトークンが生成される方法を変更できるようにするオーバーライドする特定のメソッドが見つからないようです。考え?

ここでもカスタム エンコーダーが役立つかどうかはわかりませんが、ファイルへの xmlwriter を使用してメッセージ オブジェクトで writemessage を呼び出しました。証明書の raw バイトであると思われる base64 文字列で構成される binarysecuritytoken を確認できます。おそらくその後、メッセージは mtom 最適化されますか?

4

1 に答える 1

0

ここには簡単な方法はありません。MTOM をすべて無効にすることもできますが、それ以外の場合はバイナリ データが最適化されます。構成できないと思われる内部しきい値があります (特定のサイズからのみメッセージからバイナリ データを移動するのは費用対効果が高いです)。

とにかくこれを試してみたい場合は、おそらく MTOM エンコーダーに非常に似たカスタム メッセージ エンコーダーを実装する必要があり(リフレクターのコードを見てください)、内部的に呼び出すこともできます。置き換えたいのは、XmlMtomWriter のインスタンス化です。独自のライターで writeBase64() メソッドをオーバーライドして、データがしきい値を超えていない場合に writeString に委譲するようにします。.Net をソース デバッグ モードにし、適切な場所にブレークポイントを配置することで、このシナリオ全体のドライ ランを実行できます。

于 2013-10-26T23:51:32.313 に答える