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) 및 시간소인 요소를 첨부할 메시지 파트를 지정하는 작업이 포함됩니다. 다음 서명 및 관련 서명 파트 정보가 구성됩니다.
서명 파트 | 설명 |
---|---|
키워드 | 키워드를 사용하여 서명 파트를 추가합니다. 서명 파트에 다음 키워드를 사용하십시오.
|
xpath | XPath 표현식을 사용하여 서명 파트를 추가합니다. |
part | WSSSignPart 오브젝트를 서명 파트의 대상으로 추가합니다. |
timestamp | WSSTimestamp 오브젝트를 서명 파트의 대상으로 추가합니다. 지정된 경우 시간소인 정보는 메시지가 생성되는 시간과 만료되는 시간도 지정합니다. |
header | QName이 지정한 헤더를 서명 파트의 대상으로 추가합니다. |
securityToken | SecurityToken 오브젝트를 서명 파트의 대상으로 추가합니다. |
서명 정보의 경우 특정 기본 동작이 발생합니다. WSSSignature API를 사용하는 가장 간단한 방법은 기본 동작을 사용하는 것입니다(예제 코드 참조). 서명 메소드, 정규화 메소드, 보안 토큰 참조 및 서명 파트에 대한 기본값은 WSS API가 정의합니다.
서명 결정 | 기본 동작 |
---|---|
사용할 키워드 | 키워드를 설정합니다. WebSphere Application
Server는 기본적으로 다음 키워드를 지원합니다.
|
사용할 서명 메소드 | 서명 알고리즘을 설정합니다. 기본 서명 메소드는 RSA SHA1입니다. WebSphere Application
Server는 다음 사전 구성된 서명 메소드를 지원합니다.
|
사용할 정규화 메소드 | 정규화 알고리즘을 설정합니다. 기본 정규화 메소드는 EXC C14N입니다. WebSphere Application Server는
다음 사전 구성된 정규화 메소드를 지원합니다.
|
서명 확인의 필수 여부 | 서명 확인을 요구할지 여부를 설정합니다. 기본값은 false입니다.서명 확인은 OASIS 웹 서비스 보안 버전 1.1 스펙에서 정의됩니다. 필수인 경우 서명 확인 값은 응답 메시지에서 서명 확인을 생성한 메시지를 다시 받은 후에 서명 확인을 유효성 검증하는 데 사용하기 위해 저장됩니다. 이 메소드는 요청자 측의 메소드입니다. |
사용할 보안 토큰 | SecurityToken을 설정합니다. 토큰 유형은 메시지 서명 및 유효성 검증에 사용할 토큰 유형을 지정합니다. X.509 토큰이 기본 토큰 유형입니다. WebSphere Application Server는 다음 사전 구성된 이용자 토큰 유형을 제공합니다.
필요에 따라 사용자 정의 토큰 유형을 작성할 수도 있습니다. |
설정할 토큰 참조 | refType을 설정합니다. SecurityToken.REF_STR은 토큰 참조 유형에 대한
기본값입니다. WebSphere Application
Server는 다음과 같은 사전 구성된 토큰 참조 유형을 지원합니다.
|
WSSSignature.requireSignatureConfirmation()이 호출되면 WSSSignature API는 응답 메시지에 서명 확인이 포함될 것으로 예상합니다.
프로시저
결과
예
다음 예제는 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);
다음에 수행할 작업
그런 다음 기본값과 다른 메소드를 원하는 경우 알고리즘 메소드를 선택하십시오. 알고리즘 메소드를 변경할 필요가 없는 경우 WSSVerification API를 사용하여 서명을 검증하고 바인딩의 이용자 섹션에서 알고리즘 메소드를 지정하십시오. WSSVerification API는 응답 이용자(클라이언트 측)에서만 지원됨을 유의하십시오.