2016-06-22 2 views
0

CXF를 사용하여 SOAP SOAP WS를 작성하고 있는데 문제가 있습니다. 요청 작업에서 하나의 필드 만 암호화해야합니다. SOAPUI를 사용하여 일부 테스트를 수행했습니다. X.509 인증서를로드하고 나가는 WS-Security 구성을 만들고 특정 필드를 암호화하고 WS 호출이 정상입니다. 하지만 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} 크레딧 카드, {요소} {} 사용자 이름"당신이 javabased 구성을 사용하는 경우 />

그것은

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

CreditCard.Name과 같은 하위 요소를 암호화하려면 어떻게해야합니까? –

관련 문제