私は解決できないように見える問題に直面しています。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 最適化されますか?