0

Web サービスにカスタム署名を使用しようとしています。アイデアは、カスタム署名を作成/検証するハンドラーをサーバーとクライアント側に追加することです。全体に署名する必要があると仮定します。

問題は、SOAP リクエストを受信した後に、 JAX WS サーバー側が (名前空間宣言を追加/繰り返すことによって) を変更することです。

以下は、サーバー側で TCP/IP モニターによってキャプチャされた単純化された SOAP 要求です。

<?xml version="1.0"  standalone="no"?>
  <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
      <ns2:getServerName xmlns:ns2="http://ws.example.com/">
        <arg0>someText</arg0>
      </ns2:getServerName>
    </S:Body>
  </S:Envelope>

サーバー側でアクティブなハンドラーは 1 つだけで、最初のアクションは整形式の出力です。

    public boolean handleMessage(SOAPMessageContext context) {

        try {
            SOAPMessage soapMsg = context.getMessage();                     
            SOAPEnvelope soapEnv = soapMsg.getSOAPPart().getEnvelope();
            nodeToPrettyFormat(soapEnv, null); //just a System.out in pretty format

結果の出力は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Header/>
  <S:Body>
      <ns2:getServerName
          xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns2="http://ws.example.com/">
        <arg0>someText</arg0>
      </ns2:getServerName>
  </S:Body>
</S:Envelope>

ご覧のとおり、要素の xmlns:S="http://schemas.xmlsoap.org/soap/envelope/ が複製されています。これにより、要素を含むすべての署名が無効になります。

そう、

  • なぜこうなった?
  • それは防ぐことができますか?
  • (一般的に) カスタム署名を適用するより良いアイデアはありますか?

ありがとうございました。

4

0 に答える 0