클라이언트 측 요청 생성기(전송자) 바인딩에 대해 서명 정보를 구성할 수 있습니다. 서명 정보는 SOAP 본문, 시간소인 정보 및
사용자 이름 토큰을 포함한 메시지 파트에 서명하고 유효성을 검증하는 데 사용됩니다. 요청 서명을 위해 클라이언트를 구성하려면, 클라이언트를 구성할 때 어떤 메시지 파트를 디지털 서명할지를 지정하십시오.
시작하기 전에
WebSphere® Application Server는 XML 디지털 서명을
기존 알고리즘(예: RSA, HMAC, SHA1)과 같이 사용합니다. XML 서명은 키 정보를 설명하는
많은 메소드를 정의하고 새 메소드 정의를 사용합니다. 이러한 단계를 완료하기 전에
디지털 컨텐츠의 디지털 서명을 확인하고 서명하기 위한 XML 디지털 서명에 대해 익히십시오.
이 태스크 정보
XML 서명을 SOAP 메시지에 포함하여 다음
문제가 실현됩니다. 메시지 무결성 및 인증. 기밀성이 암호화를 나타내는 반면 무결성은 디지털 서명을 나타냅니다.
무결성은 인터넷에서 데이터를 전송하는 중 데이터 수정 위험을 줄입니다.
WebSphere Application
Server는 기본 생성기에 대한 서명 정보를 사용하여 메시지의 파트(예: 본문, 시간소인 및 사용자 이름 토큰)에 서명합니다.
서명 정보의 경우
다음을 지정해야 합니다.
- 서명할 메시지 파트
- 서명 키에 대한 키 정보에서 참조되는 키 정보
- 서명 알고리즘
WebSphere Application Server는
바인딩에 대해 기본값을 제공합니다. 그러나 관리자는 프로덕션 환경의 기본값을 수정해야 합니다.
WSSSignature API는 다음 파트를 서명 파트로 구성합니다.
표 1. 사전 구성된 서명 파트. 서명 정보를 사용하여 메시지의 파트를 유효성 검증합니다. 파트 |
설명 |
보안 토큰 오브젝트 |
이 오브젝트는 클라이언트를 인증합니다. 이 옵션을 지정하면 메시지가 서명됩니다. 로그인 구성 인증 메소드가 선택된 경우 보안 토큰을 사용하여 메시지를 디지털 서명할 수 있습니다. |
WSSTimestamp 오브젝트 |
이 오브젝트는 시간소인을 메시지에 추가합니다.
메시지를 전송하고 수신한 시간에 기반하여 시간소인은
메시지의 유효성을 판별합니다. |
WSSSignature 파트 오브젝트 |
이 오브젝트는 서명 파트를 메시지에 추가합니다. |
대상으로서의 SOAP 헤더 및 QName |
이 서명 파트는 QName이 지정한 헤더를 검증 파트로 추가합니다. |
WSS API를 사용하면
키워드 또는 XPath 표현식을 사용하여 서명할 메시지 파트를 지정할 수 있습니다. WebSphere Application
Server는 다음 키워드의 사용을 지원합니다.
표 2. 지원되는 서명 키워드. 서명되는 메시지 파트를 지정하기 위해 키 정보가 사용됩니다. 키워드 |
참조 |
ADDRESSING_HEADERS |
웹 서비스 주소 지정(WS-Addressing) 헤더입니다. |
BODY |
SOAP 메시지 본문입니다. 본문은 메시지의 사용자 데이터 부분입니다. |
TIMESTAMP |
작성 및 만기 시간소인 정보입니다. |
WSS API(Web Services Security API)는
바인딩 파일의 요청 생성기(클라이언트 측) 섹션에 대한 서명 정보를 구성하는 데 사용됩니다. 클라이언트 측에서 서명 정보를 구성하려면
WSS API를 사용하거나 관리 콘솔을 사용하여 서명에 대한 정책 세트를 구성하십시오.
WSS API를 사용하여 구성하는 경우,
WSSSignature 및 WSSSignPart API는 다음 단계를 완료하여 요청 생성기 서명을 위해 클라이언트를 구성할 때
디지털로 서명할 메시지 파트를 지정합니다.
프로시저
- WSSSignature API는 디지털로 서명하기 위해 SOAP 메시지의 필수 파트를
추가합니다. 키워드 또는 XPath 표현식을 사용하여
필수 암호화 파트를 지정할 수 있습니다.
- WSSSignature API는 서명 메소드 알고리즘을 설정합니다. 기본 서명 메소드는 RSA_SHA1입니다. WebSphere Application
Server는 다음과 같이 미리 구성된 알고리즘을 지원합니다.
WebSphere Application Server는
DSA-SHA1: http://www.w3.org/2000/09/xmldsig#dsa-sha1에 대해 다음 알고리즘을 지원하지 않습니다.
BSP(Basic Security Profile)를 준수하게 하려는 경우 DSA-SHA1 알고리즘을 사용할 수 없습니다.
서명에서 모든 ds:SignatureMethod/@Algorithm 요소는 대칭 키를 기반으로 하며 값이 RSA-SHA1 또는 HMAC-SHA1이어야 합니다.
요청 생성기 구성에 대해 지정되는 알고리즘은 요청 이용자 구성에 대해 지정되는 알고리즘과 일치해야 합니다.
- WSSSignature API는 정규화 메소드를 설정합니다. 기본 서명 메소드는 EXC_C14N입니다. WebSphere Application
Server는 다음과 같이 미리 구성된 알고리즘을 지원합니다.
- 독점 정규화 알고리즘의 URI, EXC_C14N:
http://www.w3.org/2001/10/xml-exc-c14n#.
- 포함 정규화 알고리즘 C14N의 URI: http://www.w3.org/2001/10/xml-c14n#.
생성기에
대해 지정한 정형화 알고리즘은 이용자의 알고리즘과 일치해야 합니다.
- WSSSignature API는 보안 토큰을 추가합니다. 이 API는 서명에 사용할 보안 토큰에 대해 다음과 같은 정보를 추가합니다.
- 보안 토큰의 클래스
- 콜백 핸들러
- JAAS 로그인 구성의 이름
- WSSSignature API는 보안 토큰 유형 및 토큰 참조 유형을 설정합니다. WebSphere Application
Server는 사전 구성된 토큰 참조를 지원합니다.
- SecurityToken.REF_STR
보안 토큰 참조를 토큰 참조 유형으로 표시합니다.
- SecurityToken.REF_KEYID
키 ID 참조를 토큰 참조 유형으로 표시합니다.
- SecurityToken.REF_EMBEDDED
임베디드 참조를 토큰 참조 유형으로 표시합니다.
- SecurityToken.REF_THUMBPRINT
thumbprint 참조를 토큰 참조 유형으로 표시합니다.
- SecurityToken.REF_KEYID가 토큰 참조 유형으로 설정되는 경우,
WSSSignature API는 키 정보 서명 유형을 설정하고 키 정보 참조가 참조하는 키 정보를 구성합니다. WebSphere Application
Server가 다음을 지원합니다.
- KeyInfo 요소가 서명되지 않도록 지정
- 전체 <KeyInfo> 요소가 서명되도록 지정
- <KeyInfo> 요소의 하위 요소 <Keyinfochildelements>가
서명되도록 지정
위의 서명 유형 중 하나를 지정하지 않으면 WebSphere Application Server가
기본적으로 전체 <KeyInfo> 요소가 서명되도록 지정합니다.
Keyinfo 또는 Keyinfochildelements를 선택하고 후속 단계에서 변환 알고리즘으로
http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform을
선택한 경우 WebSphere Application
Server는 참조된 토큰도 서명합니다.
생성기의 키 정보 서명 유형은 이용자의 서명 유형과 일치해야 합니다.
- WSSSignature API는 서명 확인 요구 여부를 지정합니다. OASIS WS-Security(Web Services Security)
버전 1.1 스펙은 서명 확인의 사용을 정의합니다.
WS-Security 버전 1.0을 사용하고 있는 경우 이 기능을 사용할 수 없습니다.
서명 확인 값은 수신되는 메시지가 리턴된 후에 서명 확인을 유효성 검증하는 데 사용하기 위해 저장됩니다. 이 메소드는
응답 메시지가 서명 확인을 SOAP 메시지에 첨부할 것으로 예상되는 경우에 호출됩니다.
- WSSSignPart API는 파트 참조를 지정합니다. 파트 참조는 디지털 서명할 메시지 파트를 지정합니다.
파트 참조는 디지털 서명된 메시지 파트를 참조합니다.
파트 속성은 <PartReference> 요소가 서명에 지정된 경우
<Integrity> 요소 이름을 참조합니다.
<SigningInfo> 요소에
여러 <PartReference> 요소를 지정할 수 있습니다. 서명 검증에 대해
<PartReference> 요소가 지정된 경우 이 요소에는
<DigestTransform> 및 <Transform>과 같은 2개의 하위 요소가 있습니다.
- WSSSignPart API는 요약 메소드 알고리즘을 지정합니다. <DigestMethod>
요소에서 지정되는 요약 메소드 알고리즘은 <SigningInfo> 요소에서 사용됩니다.
WebSphere Application Server는
다음 사전 구성된 요약 알고리즘을 지원합니다.
- http://www.w3.org/2000/09/xmldsig#sha1
- http://www.w3.org/2001/04/xmlenc#sha256
- http://www.w3.org/2001/04/xmlenc#sha512
- WSSSignPart API는 변환 알고리즘을 지정합니다. 변환 알고리즘은 <Transform> 요소에서 지정되는 알고리즘으로, 서명의 변환 알고리즘을
지정합니다. WebSphere Application Server는
다음 사전 구성된 변환 알고리즘을 지원합니다.
생성기에 대해 선택한 변환 알고리즘은 이용자에 대해 선택한 변환 알고리즘과
일치해야 합니다.
중요사항: 다음 조건이 모두 참인 경우 WebSphere Application Server는
참조된 토큰에 서명합니다.
- 이미 Keyinfo 또는 Keyinfochildelements 옵션을 선택했습니다.
- 변환 알고리즘으로
http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform을
선택합니다.
- 클라이언트 및 서버 서명 정보를 올바르게 구성했지만
클라이언트를 실행할 때 Soap body not signed
오류를 수신하면 액터를 구성해야 합니다. 관리 콘솔을 사용하여 서버에서 웹 서비스에 대해 동일한 액터 문자열을 구성하기 위한 정책 세트를 구성하십시오. 그러면
요청이 처리되고 다시 응답을 전송합니다.
클라이언트 및 서버 모두의 액터 정보는 정확히 동일한 문자열을
참조해야 합니다. 클라이언트 및 서버의 액터 필드가 일치하면
다운스트림으로 전달되는 대신, 요청 또는 응답이 적절히 작동합니다.
다른 웹 서비스에 대해 게이트웨이 역할을 하는 웹 서비스가 있을 경우 액터가 다를 수 있습니다. 그러나
다른 모든 경우에 액터 정보가 클라이언트와 서버에서 일치하는지 확인하십시오. 웹 서비스가 게이트웨이의 역할을 수행하고
게이트웨이를 통해 전달되는 요청으로 동일한 액터가 구성되지 않은 경우
웹 서비스는 클라이언트의 메시지를 처리하지 않습니다. 대신, 이 웹 서비스는 요청을 다운스트림으로 전송합니다.
올바른 액터 문자열을 포함하는 다운스트림 프로세스는 요청을 처리합니다.
응답에서도 동일한 상황이 나타납니다.
그러므로 적합한 클라이언트와 서버 액터 필드가 동기화되었는지 확인하는 것이 중요합니다.
결과
WSSSignature 및 WSSSignPart API가 이러한 단계를 완료하면
바인딩 파일의 생성기 섹션에 대해 서명 정보가 구성됩니다.
예
다음 예제는 서명을 구성하고 콜백 핸들러를 생성하며 X.509 토큰 유형을
보안 토큰으로 지정하는 WSS API 샘플 코드를 보여줍니다.
WSSFactory factory = WSSFactory.getInstance();
// Instantiate a generation context
WSSGenerationContext gencont = factory.newWSSGenerationContext();
// Generate the callback handler and specify the X.509 token
X509GenerateCallbackHandler callbackhandler = generateCallbackHandler();
SecurityToken token = factory.newSecurityToken(X509Token.class,
callbackHandler);
// Set the signature information
WSSSignature sig = factory.newWSSSignature(token);
// Add the header using QName
sig.addSignHeader(new QName("http://www.w3.org/2005/08/addressing", "To"));
sig.addSignHeader(new QName("http://www.w3.org/2005/08/addressing", "MessageID"));
sig.addSignHeader(new QName("http://www.w3.org/2005/08/addressing", "Action"));
// Apply the signature
gencont.add(sig);
// Secure the message
gencont.process(msgctx);
다음에 수행할 작업
다음 검증 태스크를 완료하여 클라이언트 측 요청 이용자(수신자) 바인딩에 대한 유사한 서명 정보를 구성해야 합니다.
- 서명 확인
- 서명 알고리즘 메소드를 선택합니다.
- 필요에 따라 서명된 파트를 변경하거나 추가합니다.
서명 검증이 이미 구성되어 있는 경우
암호화 및 복호화 정보를 구성하거나 이용자 및 생성기 토큰을 구성하십시오.