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 메시지를 암호화하는 경우에 사용됩니다. 클라이언트 생성기 구성은 제공자 이용자의 구성과 일치해야 합니다.

WSSEncryption API를 사용하여 발신 SOAP 메시지 암호화

기밀성 설정에서는 생성된 메시지에 기밀성 제한조건이 적용되어야 합니다. 이러한 제한조건에는 생성된 메시지 내에서 암호화해야 하는 메시지 파트를 지정하고 암호화된 난스(Nonce) 및 시간소인 요소에 첨부할 메시지 파트를 지정하는 것 등이 있습니다.

다음 암호화 파트를 구성할 수 있습니다.

표 1. 암호화 파트. 암호화 파트를 사용하여 메시지에서 암호화를 사용 설정하십시오.
암호화 파트 설명
part WSSEncryptPart 오브젝트를 암호화 파트의 대상으로 추가합니다.
키워드 키워드를 사용하여 암호화 파트를 추가합니다. WebSphere® Application Server는 다음 키워드를 지원합니다.
  • BODY_CONTENT
  • SIGNATURE
xpath XPath 표현식을 사용하여 암호화 파트를 추가합니다.
signature WSSignature 컴포넌트를 암호화된 파트의 대상으로 추가합니다.
header QName이 지정한 SOAP 헤더를 암호화된 파트의 대상으로 추가합니다.
securityToken SecurityToken 오브젝트를 암호화 파트의 대상으로 추가합니다.

암호화의 경우 특정 기본 동작이 발생합니다. WSSEncryption API를 사용하는 가장 간단한 방법은 기본 동작을 사용하는 것입니다(예제 코드 참조).

WSSEncryption은 키 암호화 알고리즘, 데이터 암호화 알고리즘, 보안 토큰 참조 메소드 및 암호화 파트(예: SOAP 본문 컨텐츠 및 서명)의 기본값을 제공합니다. 암호화 기본 동작은 다음과 같습니다.

표 2. 암호화 결정. 암호화 기본 동작을 사용하여 메시지 본문 컨텐츠 및 서명을 보안 설정하십시오.
암호화 결정 기본 동작
키워드를 사용하여 암호화할 SOAP 메시지 파트

키워드를 사용하여 추가할 수 있는 암호화 파트를 설정합니다. 기본 암호화 파트는 BODY_CONTENT 및 SIGNATURE입니다. WebSphere Application Server는 다음과 같은 키워드를 지원합니다.

  • WSSEncryption.BODY_CONTENT
  • WSSEncryption.SIGNATURE
선택할 데이터 암호화 메소드(알고리즘)

데이터 암호화 메소드를 설정합니다. 데이터 및 키 암호화 메소드 둘 다 지정할 수 있습니다. 기본 데이터 암호화 알고리즘 메소드는 AES 128입니다. WebSphere Application Server는 다음 데이터 암호화 메소드를 지원합니다.

  • WSSEncryption.AES128: http://www.w3.org/2001/04/xmlenc#aes128-cbc
  • WSSEncryption.AES192: http://www.w3.org/2001/04/xmlenc#aes192-cbc
  • WSSEncryption.AES256: http://www.w3.org/2001/04/xmlenc#aes256-cbc
  • WSSEncryption.TRIPLE_DES: http://www.w3.org.2001/04/xmlenc#tripledes-cbc
키를 암호화할지 여부(isEncrypt)

키를 암호화할 지 여부를 지정합니다. 값은 true 또는 false입니다. 기본값은 키를 암호화하는 것입니다(true).

선택할 키 암호화 메소드(알고리즘)

키 암호화 메소드를 설정합니다. 데이터 및 키 암호화 메소드 둘 다 지정할 수 있습니다. 기본 키 암호화 알고리즘 메소드는 키 랩 RSA OAEP입니다. WebSphere Application Server는 다음 키 암호화 메소드를 지원합니다.

  • WSSEncryption.KW_AES128: http://www.w3.org/2001/04/xmlenc#kw-aes128
  • WSSEncryption.KW_AES192: http://www.w3.org/2001/04/xmlenc#kw-aes192
  • WSSEncryption.KW_AES256: http://www.w3.org/2001/04/xmlenc#kw-aes256
  • WSSEncryption.KW_RSA_OAEP: http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p
  • WSSEncryption.KW_RSA15: http://www.w3.org/2001/04/xmlenc#rsa-1_5
  • WSSEncryption.KW_TRIPLE_DES: http://www.w3.org/2001/04/xmlenc#kw-tripledes
지정할 보안 토큰(securityToken)

SecurityToken을 설정합니다. 기본 보안 토큰 유형은 X509Token입니다. WebSphere Application Server는 다음 사전 구성된 이용자 토큰 유형을 제공합니다.

  • 파생 키 토큰
  • X.509 토큰
사용할 토큰 참조(refType) 보안 토큰 참조 유형을 설정합니다. 기본 토큰 참조는 SecurityToken.REF_KEYID입니다. WebSphere Application Server는 다음 토큰 참조 유형을 지원합니다.
  • SecurityToken.REF_KEYID
  • SecurityToken.REF_STR
  • SecurityToken.REF_EMBEDDED
  • SecurityToken.REF_THUMBPRINT
MTOM을 사용할지 여부(mtomOptimize) 암호화된 파트에 대해 MTOM(Message Transmission Optimization Mechanism) 최적화를 설정합니다.

프로시저

  1. WSSEncryption API를 사용하여 SOAP 메시지를 암호화하려면 먼저 애플리케이션 서버가 설치되어 있는지 확인하십시오.
  2. 암호화를 위한 WSS API 프로세스는 다음 프로세스 단계를 수행합니다.
    1. WSSFactory.getInstance()를 사용하여 WSS API 구현 인스턴스를 가져옵니다.
    2. WSSFactory 인스턴스로부터 WSSGenerationContext 인스턴스를 작성합니다.
    3. 암호화에 사용된 WSSFactory에서 SecurityToken을 작성합니다.
    4. SecurityToken을 사용하여 WSSFactory 인스턴스에서 WSSEncryption을 작성합니다. WSSEncryption의 기본 동작은 본문 컨텐츠 및 서명을 암호화하는 것입니다.
    5. 기존 파트가 적합하지 않으면 WSSEncryption에서 암호화할 새 파트를 추가합니다. addEncryptPart(), addEncryptHeader() 또는 addEncryptPartByXPath()를 호출하면 기본 파트가 지워집니다.
    6. 키를 암호화하지 않으려는 경우에는 encryptKey(false)를 호출합니다.
    7. 기본 메소드가 적합하지 않은 경우에는 데이터 암호화 메소드를 설정합니다.
    8. 기본 메소드가 적합하지 않은 경우에는 키 암호화 메소드를 설정합니다.
    9. 기본 토큰 참조가 적합하지 않은 경우에는 토큰 참조를 설정합니다.
    10. WSSEncryption을 WSSConsumingContext에 추가합니다.
    11. SOAPMessageContext와 함께 WSSGenerationContext.process()를 호출합니다.

결과

암호화 중 오류 조건이 있는 경우에는 WSSException이 제공됩니다. 성공할 경우 이 API는 WSSGenerationContext.process()를 호출하고 WS-Security 헤더가 생성되며 웹 서비스 보안을 사용하여 SOAP 메시지가 보안 설정됩니다.

다음 예제는 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);
참고: 공개 키가 암호화에 사용되므로 X509GenerationCallbackHandler에는 키 비밀번호가 필요하지 않습니다. Java™ 키 저장소에서 공개 키를 얻는 데에는 비밀번호가 필요하지 않습니다.

다음에 수행할 작업

선택할 암호화 메소드를 이전에 지정하지 않은 경우에는 WSS API를 사용하거나 관리 콘솔을 통해 정책 세트를 구성하여 데이터 및 키 암호화 알고리즘 메소드를 선택하십시오.


주제 유형을 표시하는 아이콘 태스크 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_confwssencryption
파일 이름:twbs_confwssencryption.html