WSSVerification API를 사용하여 서명 검증

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

시작하기 전에

WSS API를 사용하거나 관리 콘솔을 사용하여 서명 정보를 검증하도록 정책 세트를 구성하십시오. SOAP 메시지를 보안 설정하려면 다음 서명 태스크를 완료해야 합니다.

  • 서명 정보를 구성합니다.
  • 서명에 대한 알고리즘 메소드 및 서명 검증을 선택합니다.
  • 서명 정보를 검증합니다.

이 태스크 정보

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

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

다음 테이블은 디지털 서명 보안 제한조건(무결성)이 정의되는 경우의 필수 및 선택적 바인딩을 표시합니다.

표 1. 서명 검증 파트. 서명 검증 파트를 사용하여 메시지를 보안 설정하십시오.
검증 파트 설명
키워드
키워드를 사용하여 필수 서명 파트를 검증의 대상으로 추가합니다. 생성기 측의 요청에 대한 메시지 보호에서 여러 메시지 파트를 지정할 수 있습니다. 필수 서명 검증 파트에 다음 키워드를 사용하십시오.
  • ADDRESSING_HEADERS
  • BODY
  • TIMESTAMP
WS-Addressing 헤더는 암호화되지 않지만 서명할 수 있습니다.
xpath XPath 표현식을 사용하여 검증 파트를 추가합니다.
part WSSVerifyPart 오브젝트를 검증 파트로 추가합니다.
header QName이 지정한 헤더를 검증 파트로 추가합니다.

서명 검증 정보의 경우 특정 기본 동작이 발생합니다. WSSVerification API를 사용하는 가장 간단한 방법은 기본 동작을 사용하는 것입니다.

요약 메소드, 변환 메소드, 보안 토큰 및 필수 검증 파트에 대한 기본값은 WSS API가 정의합니다.

표 2. 서명 검증 기본 동작. 기본적으로 서명 검증 파트의 여러 특성이 구성됩니다.
서명 검증 결정 기본 동작
사용할 서명 메소드(알고리즘) 서명 알고리즘 메소드를 설정합니다. 데이터 암호화와 서명 및 정규화 둘 다 지정할 수 있습니다. 기본 서명 메소드는 RSA SHA1입니다. WebSphere Application Server는 다음 사전 구성된 서명 메소드를 지원합니다.
  • WSSVerification.RSA_SHA1: http://www.w3.org/2000/09/xmldsig#rsa-sha1
  • WSSVerification.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는 다음 사전 구성된 정규화 메소드를 지원합니다.
  • WSSVerification.EXC_C14N: http://www.w3.org/2001/10/xml-exc-c14n#
  • WSSVerification.C14N: http://www.w3.org/2001/10/xml-c14n#
서명 확인의 필수 여부 WSSSignature API가 서명 확인이 필수임을 지정하면 WSSVerification API는 서명 확인 값이 첨부된 서명 확인이 있는 응답 메시지를 받으면 이 메시지에서 서명 정보 값을 검증합니다. 서명 확인은 OASIS 웹 서비스 보안 버전 1.1 스펙에서 정의됩니다.

기본 서명 확인은 false입니다.

지정할 보안 토큰(securityToken)

securityToken 오브젝트를 서명 파트로 추가합니다. WebSphere Application Server가 검증에 사용할 토큰 정보를 설정합니다.

WebSphere Application Server는 다음과 같이 서명에 대해 사전 설정된 토큰을 지원합니다.

  • X.509 토큰
  • 파생 키 토큰
토큰에 필요한 정보에는 토큰의 클래스, 콜백 핸들러 정보 및 JAAS 로그인 모듈의 이름 등이 있습니다.

프로시저

  1. WSSVerification API를 사용하여 SOAP 메시지의 서명을 검증하려면 먼저 애플리케이션 서버가 설치되어 있는지 확인하십시오.
  2. WSSVerification API를 사용하여 검증할 메시지 파트를 설정하고 SOAP 메시지에 알고리즘을 지정하십시오. 서명 검증을 위한 WSS API 프로세스는 다음과 같은 프로세스 단계를 따릅니다.
    1. WSSFactory.getInstance()를 사용하여 WSS API 구현 인스턴스를 가져오십시오.
    2. WSSFactory 인스턴스로부터 WSSConsumingContext 인스턴스를 작성하십시오.
    3. JAX-WS 제공자 구현 클래스에서 WSSConsumingContext가 호출되는지 확인하십시오. JAX-WS 프로그래밍 모델 특성으로 인해 JAX-WS 제공자를 구현해야 하고 WSSConsumingContext를 호출하여 SOAP 메시지 서명을 검증해야 합니다.
    4. WSSFactory 인스턴스로부터 WSSVerification을 작성하십시오.
    5. 검증할 파트를 추가합니다. 요약 메소드 또는 변환 메소드가 변경된 경우 WSSVerifyPart를 작성하고 이를 WSSVerification으로 설정하십시오.
    6. 기본값이 적당하지 않은 경우 정규화 메소드의 후보를 설정합니다.
    7. 기본값이 적당하지 않은 경우 서명 메소드의 후보를 설정합니다.
    8. 기본값이 적당하지 않은 경우 후보 보안 토큰을 설정합니다.
    9. 서명 확인이 적용된 경우 requireSignatureConfirmation()을 호출합니다.
    10. WSSVerification을 WSSConsumingContext에 추가합니다.
    11. SOAP 메시지 컨텍스트와 함께 WSSConsumingContext.process()를 호출합니다.

결과

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

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

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

// Generate the WSSFactory instance (step: a)
   WSSFactory factory = WSSFactory.getInstance();

// Generate the WSSConsumingContext instance (step: b)
   WSSConsumingContext concont = factory.newWSSConsumingContext();


// Generate the certificate list
	 String certpath = "c:/WebSphere/AppServer/etc/ws-security/samples/intca2.cer";
// The location of the X509 certificate file
	 X509Certificate x509cert = null;
	    try {
		    InputStream is = new FileInputStream(certpath);
		    CertificateFactory cf = CertificateFactory.getInstance("X.509");
		    x509cert = (X509Certificate)cf.generateCertificate(is);
	      } catch(FileNotFoundException e1){
		      throw new WSSException(e1);
	      } catch (CertificateException e2) {
		      throw new WSSException(e2);
	      }
      Set<Object> eeCerts = new HashSet<Object>();
	      eeCerts.add(x509cert);  
// Create the certificate store
	  java.util.List<CertStore> certList = new java.util.ArrayList<CertStore>();
	  CollectionCertStoreParameters certparam = new CollectionCertStoreParameters(eeCerts);
	  CertStore cert = null;
	  try {
		  cert = CertStore.getInstance("Collection", certparam, "IBMCertPath");
	  } catch (NoSuchProviderException e1) {
		  throw new WSSException(e1);
	  } catch (InvalidAlgorithmParameterException e2) {
		  throw new WSSException(e2);
	  } catch (NoSuchAlgorithmException e3) {
		  throw new WSSException (e3);
	  }
	  if(certList != null ){
		  certList.add(cert);
	  }
// Generate the callback handler
	  X509ConsumeCallbackHandler callbackHandler = new X509ConsumeCallbackHandler(
			  "dsig-receiver.ks", 
			  "jks",
			  "server".toCharArray(), 
			  certList, 
			  java.security.Security.getProvider("IBMCertPath")
	  );

// Generate the WSSVerification instance (step: d)
	 WSSVerification ver = factory.newWSSVerification(X509Token.class, callbackHandler);

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

// Set the part in the SOAP header to be specified by QName (step: e)
	    ver.addRequiredVerifyHeader(new QName("http://www.w3.org/2005/08/addressing", "MessageID"));

// Set the part to be specified by the keyword (step: e)
	    ver.addRequiredVerifyPart(WSSVerification.BODY);

// Set the part to be specified by WSSVerifyPart (step: e)
	 WSSVerifyPart verPart = factory.newWSSVerifyPart();
	    verPart.setRequiredVerifyPart(WSSVerification.BODY);
	    verPart.addAllowedDigestMethod(WSSVerifyPart.SHA256);
	    ver.addRequiredVerifyPart(verPart);

// 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']");		
	    ver.addRequiredVerifyPartByXPath(sb.toString());


// Set one or more canonicalization method candidates for verification (step: f)
// DEFAULT : WSSVerification.EXC_C14N
	   ver.addAllowedCanonicalizationMethod(WSSVerification.C14N);
	   ver.addAllowedCanonicalizationMethod(WSSVerification.EXC_C14N);

// Set one or more signature method candidates for verification (step: g)
// DEFAULT : WSSVerification.RSA_SHA1
	   ver.addAllowedSignatureMethod(WSSVerification.HMAC_SHA1);

// Set the candidate security token to used for the verification (step: h)
	 X509ConsumeCallbackHandler callbackHandler2 = getCallbackHandler2();
	   ver.addToken(X509Token.class, callbackHandler2);


// Set the flag to require the signature confirmation (step: i)
	  ver.requireSignatureConfirmation();

// Add the WSSVerification to the WSSConsumingContext (step: j)
	 concont.add(ver);

//Validate the WS-Security header (step: k)
concont.process(msgcontext);

다음에 수행할 작업

SOAP 메시지에 대해 이 서명 및 설정 알고리즘 메소드를 검증한 후에 요약 메소드 또는 변환 메소드를 설정할 수 있습니다. 이러한 메소드를 설정하려는 경우 WSSVerifyPart API를 사용하거나 관리 콘솔을 사용하여 정책 세트를 구성하십시오.


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



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