2016-06-22 11 views
0

CXFを使用してクライアントSOAP WSを構築していますが、問題があり、要求操作で1つのフィールドのみを暗号化する必要があります。私はいくつかのテストを行った SOAPUIを使用して、私はX.509証明書をロードし、発信WSセキュリティ設定を作成し、暗号化する特定のフィールドを選択し、WS呼び出しはOKです。 CXFを使用して、私は実装方法を知らない。トピックに関するいくつかの記事を読んで、xml CXF設定を使用していますが、SOAPリクエストの特定のフィールドを暗号化する方法が見つかりませんでした。たとえば、私は次のように暗号化のリクエストが必要です。CXFとX.509を使用してSOAPリクエスト内の特定のフィールドを暗号化する方法

<soapenv:Body> 
 
    <v2:ExampleRequest> 
 
    <v2:field1>1909</v2:field1> 
 
    <v2:field2>TEST</v2:field2> 
 
    <v2:field3>22</v2:field3> 
 
    <v2:field4><xenc:EncryptedData Id="ED-B26971BCECBE85FCAB14666299360062" Type="http://www.w3.org/2001/04/xmlenc#Content" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"><xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/><ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><wsse:SecurityTokenReference wsse11:TokenType="http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#EncryptedKey" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsse11="http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd"><wsse:Reference URI="#EK-B26971BCECBE85FCAB14666299359531"/></wsse:SecurityTokenReference></ds:KeyInfo><xenc:CipherData><xenc:CipherValue>1eEPbo5tRbf+c+A7eNJOONL+amAA/To87XAa6nCsM6M=</xenc:CipherValue></xenc:CipherData></xenc:EncryptedData></v2: field4> 
 
    </v2: ExampleRequest > 
 
</soapenv:Body>

いくつかの提案や意見を、私はそれがインターセプタを使用することができると思いますが、迎撃にのみに使用される名前空間なしで値フィールドを暗号化することができ生のSOAP

答えて

1

CXFでは、暗号化にWSS4Jを使用します。クライアントの場合、WSS4JOutInterceptorを使用します。これを使用する例は、hereです。

メッセージのどの部分を暗号化するかを指定するには、プロパティWsHandlerConstants.ENCRYPTION_PARTSがあります。以下は、JavaDocからの抜粋です。

リクエストのどの部分を暗号化するかを定義するパラメータ。

このパラメータの値は、暗号化する要素を識別する名前である、セミコロンで区切られた要素のリストです( )。暗号化モード 指定子と名前空間の識別(それぞれが中括弧のペアの中にある の括弧内にある)が各要素名に先行することがあります。

暗号化モード指定子は{Content}か{Element}です。 は、要素とコンテンツの暗号化の間の相違点については、W3C XML暗号化仕様を参照してください。 暗号化モードの既定値は、コンテンツが省略されている場合は です。リストの例:

<パラメータ名= "encryptionParts"
値= "{内容} {http://example.org/paymentv2}のCreditCard; {要素} {}ユーザー名" あなたはjavabased構成を使用する場合は、/>

outProps.put(WSHandlerConstants.ENCRYPTION_PARTS, "{Content}{http://example.org/paymentv2}CreditCard;{Element}{}UserName"); 
+0

CreditCard.Nameのような子要素を暗号化したい場合はどうなりますか? –

関連する問題