3

Wss4jSecurityInterceptor の Spring 実装に基づいて ws (soap) を開発しました。

構成は次のとおりです。

...
securementActions=タイムスタンプ署名暗号化
...
securementSignatureParts={要素}{...schemas.xmlsoap.org/soap/envelope/}本体;{要素}...www.w3.org/2005/08/addressing}To;{要素}{...www .w3.org/2005/08/addressing}Action;{Element}{...www.w3.org/2005/08/addressing}MessageID;{Element}{...www.w3.org/2005/08 /addressing}RelatesTo;{要素}{...docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd}タイムスタンプ

クロックがサーバーのクロックより 2 分 (またはそれ以上) 遅れて設定されているときにクライアントから ws を呼び出すと、以下のメッセージが表示されます。

org.apache.ws.security.WSSecurityException: メッセージの有効期限が切れています (WSSecurityEngine: 無効なタイムスタンプ メッセージのセキュリティ セマンティクスの有効期限が切れています)

SoapUI を使用して ws をテストします。私が受け取った応答では、クライアント側でボディブロックを復号化できません。

時計同期時のレスポンス

    <SOAP-ENV:封筒 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" >
       <SOAP-ENV:ヘッダー xmlns:wsa="http://www.w3.org/2005/08/addressing">
       ...
       </SOAP-ENV:ヘッダー>
       <SOAP-ENV:Body wsu:Id="id-148" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0. xsd">
          <SOAP-ENV:フォルト>
             <faultcode>SOAP-ENV:サーバー</faultcode>
             <faultstring xml:lang="en">エラー ラベル</faultstring>
             <詳細>
                <submissionFault xmlns="xxxxxx">
                   <エラー xmlns="xxxxxxx">
                      <errorCode>ここにエラーコード</errorCode>
                      <errorDescription>ここにエラーの説明</errorDescription>
                      <errorDetail>エラーの詳細はこちら</errorDetail>
                   </エラー>
                </submissionFault>
             </詳細>
          </SOAP-ENV:障害>
       </SOAP-ENV:本体>
    </SOAP-ENV:エンベロープ>

両方の時計が同期していない場合の応答

    <SOAP-ENV:エンベロープ xmlns:SOAP-ENV="..." xmlns:xenc="...#">
       <SOAP-ENV:ヘッダー xmlns:wsa="...">
       ...
       </SOAP-ENV:ヘッダー>
       <SOAP-ENV:本体 wsu:Id="id-157" xmlns:wsu="...">
          <xenc:EncryptedData Id="EncDataId-162" タイプ="...">
             <xenc:EncryptionMethod Algorithm="...#aes256-cbc"/>
             <ds:KeyInfo xmlns:ds="...#">
                <wsse:SecurityTokenReference xmlns:wsse="...">
                   <wsse:参照 URI="#EncKeyId-xxxxxxxxxxxxxhhhhhyyyy"/>
                </wsse:SecurityTokenReference>
             </ds:キー情報>
             <xenc:CipherData>
                <xenc:CipherValue>PMam8TSjmX9gHDE7+/fekt575W+qWFC2xcMAXzAlTPfxoQ3ctBG9bUPUAsnMNQm41G9ya0EZaQtV
    zRL59IFW0wrowbJXhUHXvW0YPkAbIUSnnmWreQpHwy5oKA5DQWJ+nzTnyMdXq8ukxDPCP5ALlvGD
    wv685Fs14YmWupzXVBGufcu4XSGFI
    ...
    XhUkjHrOlrBL4PHiZ9imt
    nWLswfcay6friGSfkN2Z0U5oJ3XW034sVCONFBdZVNwia51nNmGTGwsMXJFxXLXCxv/lVP1p3tMq
    StoR11Otn8d/gcc06q+jBJDu5KXTgI5V6fHyW17jvV924AorYA44BiZ6ym5u4dti8fvCSFfj8shg
    /4DhGS16ATWFFfZ+QzTxageik1+d/+AbMc031wrO60hm7dIMAsOegqD0BKUkEgkBbk0totU4TI55
    C3BHPmv44QPGpoOSmkGAjYYzfbv9GE6HeaUBVXviJqaA1q0BiIIklINMmnry9KU53mi59swqBNKz
    pF6cNDjKFGDNeRW9JLGNJq8dsnqK8nn7zE/sE2PxFGwJ+3qk40TuE6mjhA==</xenc:CipherValue>
             </xenc:CipherData>
          </xenc:暗号化されたデータ>
       </SOAP-ENV:本体>
    </SOAP-ENV:エンベロープ>

何か案が?

ありがとう

4

3 に答える 3

2

これは予期されていることです。サーバーとクライアントのクロックを同期する必要があります。そうしないと、デフォルトの WSS4J TimestampValidator が例外をスローします。

「org.apache.ws.security.WSSecurityException: メッセージの有効期限が切れました (WSSecurityEngine: 無効なタイムスタンプ メッセージのセキュリティ セマンティクスの有効期限が切れました)」

于 2015-07-13T16:47:29.517 に答える
2

期待どおりに機能しており、Spring では、リクエストがクライアントからサーバーに到達するまでに最大 300 秒の遅延が許可されています。これ以上かかると、「メッセージの有効期限が切れました」という例外がスローされます。Spring のファイル Wss4jSecurityInterceptor で提供されます。したがって、理想的には、サーバーはクライアントから 0 ~ 300 秒高速である必要があります。

于 2017-05-09T11:54:43.077 に答える