WSSEncryption API를 사용하여 SOAP 메시지 암호화
구성의 정책 세트를 사용하지 않고도 WSS API(Web Services Security API)를 사용하여 SOAP 메시지를 보안 설정할 수 있습니다. 생성기 측에서 요청 암호화를 위해 클라이언트를 구성하려면 WSSEncryption API를 사용하여 SOAP 메시지를 암호화하십시오. WSSEncryption API는 클라이언트를 구성할 때 암호화할 요청 SOAP 메시지 파트를 지정합니다.
시작하기 전에
WSS API를 사용하거나 관리 콘솔에서 정책 세트를 사용하여 암호화를 사용으로 설정하고 SOAP 메시지에서 생성기 보안 토큰을 추가할 수 있습니다. SOAP 메시지를 보안 설정하려면 WSS API를 사용하여 필요에 따라 다음 암호화 태스크를 완료하십시오.
- WSSEncryption API를 사용하여 암호화를 구성하고 암호화 메소드를 선택하십시오.
- 필요에 따라 WSSEncryptPart API를 사용하여 암호화된 파트를 구성하십시오.
이 태스크 정보
생성기 측의 암호화 정보는 요청 생성기(클라이언트 측) 바인딩에 대한 발신 SOAP 메시지를 암호화하는 경우에 사용됩니다. 클라이언트 생성기 구성은 제공자 이용자의 구성과 일치해야 합니다.

기밀성 설정에서는 생성된 메시지에 기밀성 제한조건이 적용되어야 합니다. 이러한 제한조건에는 생성된 메시지 내에서 암호화해야 하는 메시지 파트를 지정하고 암호화된 난스(Nonce) 및 시간소인 요소에 첨부할 메시지 파트를 지정하는 것 등이 있습니다.
다음 암호화 파트를 구성할 수 있습니다.
암호화 파트 | 설명 |
---|---|
part | WSSEncryptPart 오브젝트를 암호화 파트의 대상으로 추가합니다. |
키워드 | 키워드를 사용하여 암호화 파트를 추가합니다. WebSphere® Application
Server는 다음 키워드를 지원합니다.
|
xpath | XPath 표현식을 사용하여 암호화 파트를 추가합니다. |
signature | WSSignature 컴포넌트를 암호화된 파트의 대상으로 추가합니다. |
header | QName이 지정한 SOAP 헤더를 암호화된 파트의 대상으로 추가합니다. |
securityToken | SecurityToken 오브젝트를 암호화 파트의 대상으로 추가합니다. |
암호화의 경우 특정 기본 동작이 발생합니다. WSSEncryption API를 사용하는 가장 간단한 방법은 기본 동작을 사용하는 것입니다(예제 코드 참조).
WSSEncryption은 키 암호화 알고리즘, 데이터 암호화 알고리즘, 보안 토큰 참조 메소드 및 암호화 파트(예: SOAP 본문 컨텐츠 및 서명)의 기본값을 제공합니다. 암호화 기본 동작은 다음과 같습니다.
암호화 결정 | 기본 동작 |
---|---|
키워드를 사용하여 암호화할 SOAP 메시지 파트 | 키워드를 사용하여 추가할 수 있는 암호화 파트를 설정합니다. 기본 암호화 파트는 BODY_CONTENT 및 SIGNATURE입니다. WebSphere Application Server는 다음과 같은 키워드를 지원합니다.
|
선택할 데이터 암호화 메소드(알고리즘) | 데이터 암호화 메소드를 설정합니다. 데이터 및 키 암호화 메소드 둘 다 지정할 수 있습니다. 기본 데이터 암호화 알고리즘 메소드는 AES 128입니다. WebSphere Application Server는 다음 데이터 암호화 메소드를 지원합니다.
|
키를 암호화할지 여부(isEncrypt) | 키를 암호화할 지 여부를 지정합니다. 값은 true 또는 false입니다. 기본값은 키를 암호화하는 것입니다(true). |
선택할 키 암호화 메소드(알고리즘) | 키 암호화 메소드를 설정합니다. 데이터 및 키 암호화 메소드 둘 다 지정할 수 있습니다. 기본 키 암호화 알고리즘 메소드는 키 랩 RSA OAEP입니다. WebSphere Application Server는 다음 키 암호화 메소드를 지원합니다.
|
지정할 보안 토큰(securityToken) | SecurityToken을 설정합니다. 기본 보안 토큰 유형은 X509Token입니다. WebSphere Application Server는 다음 사전 구성된 이용자 토큰 유형을 제공합니다.
|
사용할 토큰 참조(refType) | 보안 토큰 참조 유형을 설정합니다.
기본 토큰 참조는 SecurityToken.REF_KEYID입니다. WebSphere Application Server는 다음 토큰 참조 유형을 지원합니다.
|
MTOM을 사용할지 여부(mtomOptimize) | 암호화된 파트에 대해 MTOM(Message Transmission Optimization Mechanism) 최적화를 설정합니다. |
프로시저
결과
예
다음 예제는 WSSEncryption에 정의된 메소드를 사용하는 샘플 코드를 제공합니다.
// Get the message context
Object msgcontext = getMessageContext();
// Generate the WSSFactory instance (step: a)
WSSFactory factory = WSSFactory.getInstance();
// Generate the WSSGenerationContext instance (step: b)
WSSGenerationContext gencont = factory.newWSSGenerationContext();
// Generate the callback handler
X509GenerateCallbackHandler callbackHandler = new
X509GenerateCallbackHandler(
"",
"enc-sender.jceks",
"jceks",
"storepass".toCharArray(),
"bob",
null,
"CN=Bob, O=IBM, C=US",
null);
// Generate the security token used for encryption (step: c)
SecurityToken token = factory.newSecurityToken(X509Token.class , callbackHandler);
// Generate WSSEncryption instance (step: d)
WSSEncryption enc = factory.newWSSEncryption(token);
// Set the part to be encrypted (step: e)
// DEFAULT: WSSEncryption.BODY_CONTENT and WSSEncryption.SIGNATURE
// Set the part specified by the keyword (step: e)
enc.addEncryptPart(WSSEncryption.BODY_CONTENT);
// Set the part in the SOAP Header specified by QName (step: e)
enc.addEncryptHeader(new QName("http://www.w3.org/2005/08/addressing",
"MessageID"));
// Set the part specified by WSSSignature (step: e)
SecurityToken sigToken = getSecurityToken();
WSSSignature sig = factory.newWSSSignature(sigToken);
enc.addEncryptPart(sig);
// Set the part specified by SecurityToken (step: e)
UNTGenerateCallbackHandler untCallbackHandler =
new UNTGenerateCallbackHandler("Chris", "sirhC");
SecurityToken unt = factory.newSecurityToken(UsernameToken.class,
untCallbackHandler);
enc.addEncryptPart(unt, false);
// sSt the part specified by XPath expression (step: e)
StringBuffer sb = new StringBuffer();
sb.append("/*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/'
and local-name()='Envelope']");
sb.append("/*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/'
and local-name()='Body']");
sb.append("/*[namespace-uri()='http://xmlsoap.org/Ping'
and local-name()='Ping']");
sb.append("/*[namespace-uri()='http://xmlsoap.org/Ping'
and local-name()='Text']");
enc.addEncryptPartByXPath(sb.toString());
// Set whether the key is encrypted (step: f)
// DEFAULT: true
enc.encryptKey(true);
// Set the data encryption method (step: g)
// DEFAULT: WSSEncryption.AES128
enc.setEncryptionMethod(WSSEncryption.TRIPLE_DES);
// Set the key encryption method (step: h)
// DEFAULT: WSSEncryption.KW_RSA_OAEP
enc.setEncryptionMethod(WSSEncryption.KW_RSA15);
// Set the token reference (step: i)
// DEFAULT: SecurityToken.REF_KEYID
enc.setTokenReference(SecurityToken.REF_STR);
// Add the WSSEncryption to the WSSGenerationContext (step: j)
gencont.add(enc);
// Process the WS-Security header (step: k)
gencont.process(msgcontext);
다음에 수행할 작업
선택할 암호화 메소드를 이전에 지정하지 않은 경우에는 WSS API를 사용하거나 관리 콘솔을 통해 정책 세트를 구성하여 데이터 및 키 암호화 알고리즘 메소드를 선택하십시오.