WSSSignature API를 사용하여 서명 정보 구성

구성의 정책 세트를 사용하지 않고도 WSS API(Web Services Security API)를 사용하여 SOAP 메시지를 보안 설정할 수 있습니다. 클라이언트 측 요청의 생성기 바인딩 섹션에 대해 서명 정보를 구성하려면 WSSSignature API를 사용하십시오. WSSSignature API는 com.ibm.websphere.wssecurity.wssapi.signature 패키지의 파트입니다.

시작하기 전에

WSS API를 사용하거나 관리 콘솔을 통해 정책 세트를 구성하여 이 서명 정보를 사용으로 설정할 수 있습니다. SOAP 메시지를 보안 설정하려면 다음 서명 태스크를 완료해야 합니다.

  • 서명 정보를 구성합니다.
  • 서명 메소드를 선택합니다.
  • 필요에 따라 서명 파트를 추가하거나 변경합니다.

이 태스크 정보

WebSphere® Application Server는 기본 생성기의 서명 정보를 사용하여 메시지의 파트에 서명하고 RSA-SHA1 및 HMAC-SHA1과 같은 기존 알고리즘이 있는 XML 디지털 서명을 사용합니다.

XML 서명은 키 정보를 설명하는 많은 메소드를 정의하고 새 메소드 정의를 사용합니다. XML 서명을 사용할 때 XML 정규화(C14N)가 필요한 경우가 있습니다. 정보는 직렬화된 XML 문서 내에서 다양한 방식으로 표시 가능합니다. C14N 프로세스는 XML 정보를 정규화하는 데 사용됩니다. 정규화되는 정보는 C14N 알고리즘에 따라 달라지므로 적합한 C14N 알고리즘을 선택하십시오.

서명 정보는 생성된 메시지에 적용되는 무결성 제한조건을 지정합니다. 제한조건에는 생성된 메시지 내 디지털로 서명되어야 하는 메시지 파트 및 디지털로 서명된 난스(Nonce) 및 시간소인 요소를 첨부할 메시지 파트를 지정하는 작업이 포함됩니다. 다음 서명 및 관련 서명 파트 정보가 구성됩니다.

표 1. 서명 파트 정보. 서명 파트를 사용하여 메시지를 보안 설정하십시오.
서명 파트 설명
키워드
키워드를 사용하여 서명 파트를 추가합니다. 서명 파트에 다음 키워드를 사용하십시오.
  • ADDRESSING_HEADERS
  • BODY
  • TIMESTAMP
WS-Addressing 헤더는 암호화되지 않지만 서명할 수 있습니다.
xpath XPath 표현식을 사용하여 서명 파트를 추가합니다.
part WSSSignPart 오브젝트를 서명 파트의 대상으로 추가합니다.
timestamp WSSTimestamp 오브젝트를 서명 파트의 대상으로 추가합니다. 지정된 경우 시간소인 정보는 메시지가 생성되는 시간과 만료되는 시간도 지정합니다.
header QName이 지정한 헤더를 서명 파트의 대상으로 추가합니다.
securityToken SecurityToken 오브젝트를 서명 파트의 대상으로 추가합니다.

서명 정보의 경우 특정 기본 동작이 발생합니다. WSSSignature API를 사용하는 가장 간단한 방법은 기본 동작을 사용하는 것입니다(예제 코드 참조). 서명 메소드, 정규화 메소드, 보안 토큰 참조 및 서명 파트에 대한 기본값은 WSS API가 정의합니다.

표 2. 서명 기본 동작. 기본적으로 여러 서명 동작이 구성됩니다.
서명 결정 기본 동작
사용할 키워드 키워드를 설정합니다. WebSphere Application Server는 기본적으로 다음 키워드를 지원합니다.
  • ADDRESSING_HEADERS
  • BODY
  • TIMESTAMP
사용할 서명 메소드 서명 알고리즘을 설정합니다. 기본 서명 메소드는 RSA SHA1입니다. WebSphere Application Server는 다음 사전 구성된 서명 메소드를 지원합니다.
  • WSSSignature.RSA_SHA1: http://www.w3.org/2000/09/xmldsig#rsa-sha1
  • WSSSignature.HMAC_SHA1: http://www.w3.org/2000/09/xmldsig#hmac-sha1
DSA-SHA1 디지털 서명 메소드(http://www.w3.org/2000/09/xmldsig#dsa-sha1)는 지원되지 않습니다.
사용할 정규화 메소드 정규화 알고리즘을 설정합니다. 기본 정규화 메소드는 EXC C14N입니다. WebSphere Application Server는 다음 사전 구성된 정규화 메소드를 지원합니다.
  • WSSSignature.EXC_C14N; http://www.w3.org/2001/10/xml-exc-c14n#
  • WSSSignature.C14N: http://www.w3.org/2001/10/xml-c14n#
서명 확인의 필수 여부 서명 확인을 요구할지 여부를 설정합니다. 기본값은 false입니다.서명 확인은 OASIS 웹 서비스 보안 버전 1.1 스펙에서 정의됩니다. 필수인 경우 서명 확인 값은 응답 메시지에서 서명 확인을 생성한 메시지를 다시 받은 후에 서명 확인을 유효성 검증하는 데 사용하기 위해 저장됩니다. 이 메소드는 요청자 측의 메소드입니다.
사용할 보안 토큰

SecurityToken을 설정합니다. 토큰 유형은 메시지 서명 및 유효성 검증에 사용할 토큰 유형을 지정합니다. X.509 토큰이 기본 토큰 유형입니다.

WebSphere Application Server는 다음 사전 구성된 이용자 토큰 유형을 제공합니다.

  • 파생 키 토큰
  • X509 토큰

필요에 따라 사용자 정의 토큰 유형을 작성할 수도 있습니다.

설정할 토큰 참조 refType을 설정합니다. SecurityToken.REF_STR은 토큰 참조 유형에 대한 기본값입니다. WebSphere Application Server는 다음과 같은 사전 구성된 토큰 참조 유형을 지원합니다.
  • SecurityToken.REF_STR
  • SecurityToken.REF_KEYID
  • SecurityToken.REF_EMBEDDED
  • SecurityToken.REF_THUMBPRINT

WSSSignature.requireSignatureConfirmation()이 호출되면 WSSSignature API는 응답 메시지에 서명 확인이 포함될 것으로 예상합니다.

프로시저

  1. WSS API를 사용하여 SOAP 메시지의 서명 정보를 구성하려면 먼저 애플리케이션 서버가 설치되어 있는지 확인하십시오.
  2. WSSSignature API를 사용하여 메시지 파트에 서명하고 SOAP 메시지에 알고리즘을 지정하십시오. 서명을 위한 WSS API 프로세스는 다음과 같은 프로세스 단계를 따릅니다.
    1. WSSFactory.getInstance()를 사용하여 WSS API 구현 인스턴스를 가져오십시오.
    2. WSSFactory 인스턴스로부터 WSSGenerationContext 인스턴스를 작성하십시오. WSSGenerationContext는 JAX-WS 클라이언트 애플리케이션에서 호출되어야 합니다.
    3. WSSFactory에서 SecurityToken을 작성하여 서명을 위한 키를 구성하십시오.
    4. SecurityToken을 사용하여 WSSFactory 인스턴스로부터 WSSSignature를 작성하십시오. WSSSignature의 기본 동작은 BODY, ADDRESSING_HEADERS 및 TIMESTAMP 등의 서명 파트에 서명하는 것입니다.
    5. 기본 파트가 적당하지 않은 경우 서명할 파트를 추가합니다. 요약 메소드 또는 변환 메소드가 변경된 경우 WSSSignPart를 작성하고 이를 WSSSignature에 추가합니다.
    6. WSSSignature에 대한 WSSSignaturePart를 작성합니다. 서명 확인을 적용하려는 경우 requiredSignatureConfirmation() 메소드를 호출합니다.
    7. 기본값이 적당하지 않은 경우 정규화 메소드를 설정합니다.
    8. 기본값이 적당하지 않은 경우 서명 메소드를 설정합니다.
    9. 기본값이 적당하지 않은 경우 토큰 참조를 설정합니다.
    10. WSSSignature를 WSSGenerationContext에 추가합니다.
    11. SOAPMessageContext와 함께 WSSGenerationContext.process()를 호출합니다.

결과

바인딩의 생성기 섹션에 대한 서명을 구성하기 위한 단계를 완료했습니다. 메시지 파트에 서명하는 중에 오류 조건이 있는 경우 WSSException이 제공됩니다. 성공할 경우 WSSGenerationContext.process()가 호출되고 SOAP 메시지에 웹 서비스 보안이 적용됩니다.

다음 예제는 WSSignature API에 정의된 메소드를 사용하는 샘플 코드를 제공합니다.

// Get the message context
   Object msgcontext = getMessageContext();

// Generate the com.ibm.websphere.wssecurity.wssapi.WSSFactory instance  (step: a)
   WSSFactory factory = com.ibm.websphere.wssecurity.wssapi.WSSFactory.getInstance();

// Generate the WSSGenerationContext instance  (step: b)
   WSSGenerationContext gencont = factory.newWSSGenerationContext();

// Generate the callback handler
   X509GenerateCallbackHandler callbackHandler = new 
       X509GenerateCallbackHandler(
       "",
       "dsig-sender.ks",
       "jks", 
       "client".toCharArray(), 
       "soaprequester", 
       "client".toCharArray(), 
       "CN=SOAPRequester, OU=TRL, O=IBM, ST=Kanagawa, C=JP", null);

// Generate the security token to be used for the signature  (step: c)
   SecurityToken token = factory.newSecurityToken(X509Token.class, 
        callbackHandler);

// Generate the WSSSignature instance (step: d)
   WSSSignature sig = factory.newWSSSignature(token);

// Set the part to be signed  (step: e)
// DEFAULT: WSSSignature.BODY, WSSSignature.ADDRESSING_HEADERS, 
//          and WSSSignature.TIMESTAMP.

// Set the part in the SOAP Header specified by QName  (step: e)
      sig.addSignHeader(new 
                        QName("http://www.w3.org/2005/08/addressing", 
                        "MessageID"));

// Set the part specified by the keyword  (step: e)
      sig.addSignPart(WSSSignature.BODY);

// Set the part specified by SecurityToken  (step: e)
   UNTGenerateCallbackHandler untCallbackHandler = new 
      UNTGenerateCallbackHandler("Chris", "sirhC");
      SecurityToken unt = factory.newSecurityToken(UsernameToken.class, 
         untCallbackHandler);
      sig.addSignPart(unt);

// Set the part specified by WSSSignPart  (step: e)
   WSSSignPart sigPart = factory.newWSSSignPart();
      sigPart.setSignPart(WSSSignature.TIMESTAMP);
      sigPart.setDigestMethod(WSSSignPart.SHA256);
      sig.addSignPart(sigPart);

// Set the part specified by WSSTimestamp  (step: e)
   WSSTimestamp timestamp = factory.newWSSTimestamp();
      sig.addSignPart(timestamp);

// Set 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']");
      sig.addSignPartByXPath(sb.toString());

// Set to apply the signature confirmation  (step: f)
      sig.requireSignatureConfirmation();

// Set the canonicalization method  (step: g)
// DEFAULT: WSSSignature.EXC_C14N
      sig.setCanonicalizationMethod(WSSSignature.C14N);

// Set the signature method  (step: h)
// DEFAULT: WSSSignature.RSA_SHA1
      sig.setSignatureMethod(WSSSignature.HMAC_SHA1);

// Set the token reference  (step: i)
// DEFAULT: SecurityToken.REF_STR
      sig.setTokenReference(SecurityToken.REF_KEYID);
	
// Add the WSSSignature to WSSGenerationContext  (step: j)
   gencont.add(sig);

// Generate the WS-Security header  (step: k)
gencont.process(msgctx);
참고: 개인 키가 서명에 사용되므로 X509GenerationCallbackHandler에는 키 비밀번호가 필요합니다.

다음에 수행할 작업

그런 다음 기본값과 다른 메소드를 원하는 경우 알고리즘 메소드를 선택하십시오. 알고리즘 메소드를 변경할 필요가 없는 경우 WSSVerification API를 사용하여 서명을 검증하고 바인딩의 이용자 섹션에서 알고리즘 메소드를 지정하십시오. WSSVerification API는 응답 이용자(클라이언트 측)에서만 지원됨을 유의하십시오.


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



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