Metro는 확장 가능하고 손쉽게 사용할 수 있는 고성능의 웹 서비스 스택으로서 JAX-WS 참조 구현과 Project Tango를 결합한 것입니다. 웹 서비스 상호 운용 기술 또는 WSIT라고도 하는 Project Tango는 다른 구현과의 호환을 지원하고 보안, 신뢰성 및 트랜잭션 지원과 같은 서비스 품질(QOS)을 제공하기 위해 수많은 WS-* 표준을 구현합니다. Metro는 GlassFish v2라는 오픈 소스 애플리케이션 서버와 상용 솔루션인 썬 자바 시스템 애플리케이션 서버 9.1에 번들로 포함되어 있습니다. 또한 톰캣과 같은 다른 컨테이너에서도 실행됩니다.
이전의 테크팁, Securing Web Services Using WSIT에서는 WSIT를 통해 Metro가 웹 서비스 보안을 지원함을 소개한 바 있습니다. 이 지원에서는 OASIS(Organization for the Advancement of Structured Information Standards) 컨소시움에서 발표한 웹 서비스 보안 사양, 즉 WS-Security, WS-SecurityPolicy, WS-SecureConversation 및 WS-Trust를 구현합니다. 또한 이 팁에서는 Metro에서 WS-Security 지원을 사용하는 예를 소개했습니다. 다음 팁에서는 Metro에서의 WS-SecureConversation 지원에 대해 집중 조명합니다. WS-SecureConversation의 기초에 대해 학습하고, Metro의 WS-SecureConversation 지원을 활용하는 예를 살펴보겠습니다.
이 팁에는 샘플 애플리케이션 패키지가 제공됩니다. 이 샘플 애플리케이션에서는 Metro에서 웹 서비스를 위해 보안 대화를 활성화하는 방법을 보여 줍니다. 서비스의 WSDL(Web Services Definition Language) 파일에 알맞은 정책 논리식을 코딩하여 웹 서비스의 보안 대화를 수동으로 활성화할 수 있습니다. 그러나 NetBeans IDE에서는 Metro에서 웹 서비스를 위한 보안 대화를 활성화할 더 쉽고 자동화된 방법을 제공합니다. 따라서 이 팁의 샘플에서는 NetBeans, 즉 NetBeans IDE 6.0.1을 사용합니다. 또한 GlassFish v2 UR1도 사용합니다.
WS-SecureConversation 소개
WS-SecureConversation은 웹 서비스 간의 보안 통신을 활성화하도록 설계된 웹 서비스 사양입니다. 이 사양은 다른 두 웹 서비스 사양인 WS-Security 및 WS-Trust를 기반으로 합니다. WS-Security는 웹 서비스에서 메시지 수준의 보안을 위한 기본 프레임워크를 제공하며, WS-Trust는 각기 다른 보안 도메인을 망라하는 브로커 신뢰를 위한 프레임워크를 지정합니다. WS-Security 및 WS-Trust는 Securing Web Services Using WSIT 팁에서 다루고 있습니다.
WS-SecureConversation의 목적은 클라이언트와 웹 서비스 간에, 특히 이들이 여러 메시지를 교환하는 경우에 보안 메시징을 활성화하는 것입니다. WS-Security는 단순한 단방향 메시지 보안에 효과적입니다. 그러나 여러 메시지를 안전하게 주고받기 위해서는 일반적으로 클라이언트와 웹 서비스가 메시지를 교환할 보안 컨텍스트가 필요합니다. WS-SecureConversation이 그러한 컨텍스트를 제공합니다. 그림 1에서 보여주는 "핸드쉐이크" 프로세스를 추가하는데, 이 프로세스를 통해 웹 서비스와 클라이언트는 서로를 인증하고 공유 보안 컨텍스트를 설정할 수 있습니다.
보안 컨텍스트는 통신 세션이 유지되는 동안 클라이언트와 웹 서비스에서 공유합니다. 이 컨텍스트에 포함된 공유 보안 키는 클라이언트와 서비스 간의 후속 메시지를 보호하는 데 쓰일 수 있습니다. 또한 다중 메시지 교환 시나리오에서 키 교환을 반복할 필요가 없으므로 성능이 크게 향상될 수 있습니다.
![]() |
|
그림 1. WS-SecureConversation 핸드쉐이크 프로세스 |
WS-SecureConversation에서는 주로 STS(Security Token Service)에서 얻어지는 SecurityContextToken이 보안 컨텍스트를 설명하는 데 쓰입니다. WS-Trust 사양에서 소개된 STS는 클라이언트와 웹 서비스의 신뢰를 받으면서 상호 운용 가능한 보안 토큰을 제공합니다.
다음은 공유 보안 토큰의 예입니다.
<wsc:SecurityContextToken
xmlns:wsu='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd'
xmlns:wsc='http://schemas.xmlsoap.org/ws/2004/04/sc'>
<wsu:Identifier>uuid:...</wsc:Identifier>
<wsu:Created>2008-03-07T08:24:05</wsu:Created>
<wsu:Expires>2008-03-08T09:24:06</wsu:Expires>
<wsse:Keys>
<xenc:EncryptedKeyId="...">...</EncryptedKeyId>
<wsse:SecurityTokenReference>... </wsse:SecurityTokenReference>
...
</wsse:Keys>
</wsc:SecurityContextToken>
<SecurityContextToken> 요소가 보안 컨텍스트를 설명합니다. <Identifier> 요소는 절대 URI(Uniform Resource Identifier)를 사용하여 보안 컨텍스트를 식별합니다. 공유 보안 토큰의 생성일 및 만료일도 지정됩니다. <Keys> 요소는 보안 컨텍스트의 공유 비밀 키를 지정합니다.
WS-SecureConversation에서는 전반적인 보안을 향상시키는 키 유도 메커니즘도 도입합니다. 이 메커니즘에서는 여러 알고리즘을 사용하여 키를 유도할 수 있습니다. 메시지 서명 또는 암호화에 공유 비밀을 사용할 수 있지만, WS-SecureConversation 사양에서는 메시지 서명 또는 암호화에 유도된 키를 사용할 것을 권장합니다. 클라이언트와 웹 서비스는 공통의 비밀을 이용해 각기 다른 키 유도를 정의하고 사용할 수 있습니다. 예를 들어, 4개의 키를 유도하여 클라이언트와 웹 서비스가 서로 다른 키를 사용해 서명하고 암호화하는 것이 가능합니다. 키 유도 메커니즘은 공유 보안 컨텍스트에서, 즉 SecurityContextToken과 함께 사용될 뿐 아니라 WS-Security에서 쓰이는 것과 같은 다른 보안 토큰과 함께 사용될 수도 있습니다.
Metro에서의 WS-SecureConversation
Metro는 WS-Security, WS-SecurityPolicy 및 WS-Trust의 일반 프레임워크 범위에서 WS-SecureConversation을 지원합니다. WS-SecureConversation 적용이 가능한 각 웹 서비스에는 연관된 STS가 있으며, 이는 보안 컨텍스트를 실행하고 관리하는 데 쓰입니다. 보안 컨텍스트 관리에는 보안 컨텍스트 갱신이나 취소와 같은 작업이 포함될 수 있습니다.
서버의 확장 가능한 SessionManager를 사용하여 보안 컨텍스트를 유지함으로써 컨텍스트가 "웹 팜"(컨텐츠 전달에 여러 서버를 사용하는 사이트)에서 페일오버 및 고가용성 지원에 쓰이게끔 하는 것이 가능합니다. 기본적으로 SessionManager는 보안 컨텍스트를 메모리에 저장하지만, 데이터베이스에 세션을 저장하도록 SessionManager를 확장할 수 있습니다.
Metro에서는 <sp:SecureConversationToken> 정책 논리식을 통해 WS-SecureConversation을 지정합니다. WS-SecureConversation 메시지의 보안 요구 사항은 <sp:SecureConversationToken> 정책 논리식 내부의 <sp:BootstrapPolicy> 요소에 의해 지정됩니다. 런타임 API는 필요하지 않습니다.
Metro에서 보안 컨텍스트와 유도된 키는 각각 <SecurityContextToken> 및 <DerivedKeyToken>이 나타내며, 이는 WS-Security에서 제공한 일반 메커니즘의 범위에서 애플리케이션 메시지를 보호하는 데 사용됩니다.
다음은 Metro에서 WS-SecureConversation 사양을 포함하는 정책 논리식 중 일부입니다.
<ns3:SecureConversationToken ns3:IncludeToken="
http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<wsp:ExactlyOne>
<wsp:All
<ns3:BootstrapPolicy>
<wsp:Policy>
<wsp:ExactlyOne>
...
<ns3:AlgorithmSuite>
<wsp:Policy>
<wsp:ExactlyOne>
...
</wsp:ExactlyOne>
</wsp:Policy>
</ns3:AlgorithmSuite
<ns3:IncludeTimestamp/>
...
<ns3:X509Token ns3:IncludeToken=
"http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
...
<ns3:WssX509V3Token10/>
...
<ns3:OnlySignEntireHeadersAndBody/>
...
<ns3:WssX509V3Token10/
...
</ns3:BootstrapPolicy>
...
</wsp:Policy>
</ns3:SecureConversationToken>
다음은 SecurityContextToken 및 DerivedKeyToken의 예입니다.
<wsc:SecurityContextToken>
<wsc:Identifier>urn:uuid:4d651587-8443-4874-8e01-308a8b2fb8f8</wsc:Identifier>
</wsc:SecurityContextToken>
<wsc:DerivedKeyToken
<wsse:SecurityTokenReference>
<wsse:Reference
ValueType="http://schemas.xmlsoap.org/ws/2005/02/sc/sct"
URI="urn:uuid:4d651587-8443-4874-8e01-308a8b2fb8f8" />
</wsse:SecurityTokenReference>
<wsc:Offset>0</wsc:Offset>
<wsc:Length>24</wsc:Length>
<wsc:Nonce>uE/cm2f0wuq5C7e2sJTvY704</wsc:Nonce>
</wsc:DerivedKeyToken>
보안 프로파일
앞서 언급했듯이, NetBeans IDE에서는 Metro에서 웹 서비스를 위한 보안 대화를 활성화할 더 쉽고 자동화된 방법을 제공합니다. 그 중 하나는 보안 대화에 쓰일 메커니즘을 지정할 보안 프로파일 세트를 제공하는 것입니다. 이 프로파일은 다음과 같습니다.
- Username Authentication with Symmetric Keys
- Mutual Certificates Security
- Transport Security(SSL)
- Message Authentication over SSL
- SAML Authorization over SSL
- Endorsing Certificate
- SAML Sender Vouches with Certificates
- SAML Holder of Key
- STS Issued Token
- STS Issued Token with Service Certificate
- STS Issued Endorsing Token
그림 2에서 보여 주는 것처럼, NetBeans IDE를 사용하여 웹 서비스를 위한 보안을 구성할 때 이 메커니즘 중 하나를 지정합니다.
|
그림 2. 웹 서비스를 위한 보안 프로파일 지정 |
보안 메커니즘 선택 옆의 Configure 버튼만 클릭하면 해당 보안 메커니즘으로 보안 대화를 활성화할 수 있습니다. 그러면 그 보안 메커니즘의 두 번째 창이 열립니다. 그런 다음 그림 3에서 보여 주는 것처럼, 이 두 번째 창에서 "Establish Secure Session (Secure Conversation)" 확인란을 선택합니다.
![]() |
|
그림 3. 웹 서비스를 위한 보안 대화 설정 |
웹 서비스를 빌드하고 실행할 때 웹 서비스와 그 클라이언트 간의 보안 세션을 설정하기 위해 핸드쉐이크 프로세스가 사용됩니다. 일반적으로 둘 이상의 메시지에 대해 하나의 트랜잭션으로 웹 서비스를 보호하려는 경우, 보안 대화를 활성화해야 합니다.
샘플 코드 실행
이 팁에는 샘플 애플리케이션 패키지가 제공됩니다. 샘플을 설치하고 실행하려면 다음 단계를 수행합니다.
- NetBeans IDE 6.0.1 및 GlassFish v2 UR1이 없을 경우 다운로드하십시오.
- NetBeans IDE를 시작합니다.
- GlassFish v2가 NetBeans 애플리케이션 서버 중 하나가 아닌 경우 다음과 같이 추가합니다.
- Services 창에서 Servers 노드를 마우스 오른쪽 버튼으로 클릭합니다.
- Add Server를 선택합니다.
- GlassFish v2를 선택합니다.
- Next 버튼을 클릭합니다.
- Browse 버튼을 클릭한 후 GlassFish v2가 설치된 위치로 이동합니다.
- Choose 버튼을 클릭합니다.
- Next 버튼을 클릭합니다.
- GlassFish에 다른 비밀번호를 선택하지 않았다면 Admin Password를 기본값인 adminadmin으로 설정합니다.
- Finish 버튼을 클릭합니다.
- 다음과 같이 GlassFish에 테스트 인증서를 추가합니다.
copyv3.zip파일을 xwss : Document & files page에서 다운로드하고 파일의 압축을 풉니다. 압축이 풀린 새 디렉토리,copyv3가 나타나야 합니다.copyv3디렉토리로 변경합니다.build.xml파일을 열고AS_HOME변수를 GlassFish v2가 설치된 위치로 설정합니다.ant명령을 실행합니다. 그러면 샘플과 함께 사용할 수 있도록 GlassFish v2 애플리케이션 서버 키 저장소에 샘플 인증서가 복사됩니다.<GF_install_dir>\lib\ant\bin디렉토리에ant가 있습니다. 여기서<GF_install_dir>은 GlassFish v2를 설치한 디렉토리입니다.
- 샘플 패키지를 다운로드하고 압축을 풉니다. 압축이 풀린 새 디렉토리,
sc_samples가 나타나야 합니다. sc_samples\lib디렉토리로 변경합니다.hook.jar파일을GF_install_dir\lib디렉토리에 복사합니다.- NetBeans IDE에서 다음과 같이
CalculatorServiceSC프로젝트를 엽니다.- File 메뉴에서 Open Project를 선택합니다.
- 샘플 애플리케이션 다운로드에서
sc_samples디렉토리로 이동합니다. - Open Project 창에서 CalculatorServiceSC를 선택합니다.
- Open Project Folder 버튼을 클릭합니다.
CalculatorServiceSC는 NetBeans IDE를 사용하여 만든 간단한 계산기 서비스입니다. Mutual Certificates Security 프로파일을 사용하며, 보안 대화를 위해 활성화되었습니다. Projects 창에서 Web Services 노드를 확장하여CalculatorServiceSC의 보안 구성을 확인할 수 있습니다. 그런 다음 Web Services 노드에서 CalculatorSC를 마우스 오른쪽 버튼으로 클릭하고 Edit Web Services Attributes를 선택합니다(그림 4 참조).
그림 4. 웹 서비스 속성 보기
- 다음과 같이
CalculatorServiceSC프로젝트를 실행합니다.- Projects 창에서 CalculatorServiceSC 노드를 마우스 오른쪽 버튼으로 클릭합니다.
- Run을 선택합니다.
그에 대한 응답으로
CalculatorServiceSC서비스가 GlassFish v2 애플리케이션 서버에 배포되며, 웹 서비스의 WSDl 파일은http://localhost:8080/CaculatorServiceSC/CaculatorSCService?wsdl에 게시됩니다.WSDL 파일을 확인하면 여기에
<sp:SecureConversationToken>정책 논리식이 있고 이 논리식에<sp:BootstrapPolicy>요소가 있음을 알 수 있습니다.<ns3:SecureConversationToken ns3:IncludeToken= "http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"> <wsp:Policy> <wsp:ExactlyOne> <wsp:All> <ns3:BootstrapPolicy> <wsp:Policy> <wsp:ExactlyOne> <wsp:All> ...다시 말해 NetBeans IDE에서는 웹 서비스 생성 시 설정한 보안 프로파일과 보안 대화 선택 사항에 따라 보안 대화에 적합한 WSDL 사양을 생성합니다. WSDL 파일에서 WSSecureConversation 관련 사양을 수동으로 지정할 필요가 없습니다.
- NetBeans IDE에서 다음과 같이
CalculatorClientSC프로젝트를 엽니다.- File 메뉴에서 Open Project를 선택합니다.
- 샘플 애플리케이션 다운로드에서
sc_samples디렉토리로 이동합니다. - Open Project 창에서 CalculatorClientSC를 선택합니다.
- Open Project Folder 버튼을 클릭합니다.
CalculatorClientSC는CalculatorServiceSC서비스의 클라이언트입니다. - 다음과 같이
CalculatorClientSC프로젝트를 실행합니다.- Projects 창에서 CalculatorClientSC 노드를 마우스 오른쪽 버튼으로 클릭합니다.
- Run을 선택합니다.
그림 5와 비슷한 결과가 나타납니다.

그림 5. CalculatorClientSC 결과
-
NetBeans IDE에서 다음과 같이
CalculatorService프로젝트를 엽니다.- File 메뉴에서 Open Project를 선택합니다.
- 샘플 애플리케이션 다운로드에서
sc_samples디렉토리로 이동합니다. - Open Project 창에서 CalculatorService를 선택합니다.
- Open Project Folder 버튼을 클릭합니다.
CalculatorService는 NetBeans IDE를 사용하여 만든 간단한 계산기 서비스입니다. Mutual Certificates Security 프로파일을 사용하지만, 보안 대화를 위해 활성화되지 않았습니다.CalculatorService의 보안 구성은CalculatorServiceSC와 동일한 방법으로 확인할 수 있습니다. - 다음과 같이
CalculatorService프로젝트를 실행합니다.- Projects 창에서 CalculatorService 노드를 마우스 오른쪽 버튼으로 클릭합니다.
- Run을 선택합니다.
그에 대한 응답으로
CalculatorService서비스가 GlassFish v2 애플리케이션 서버에 배포되며, 웹 서비스의 WSDl 파일은http://localhost:8080/CaculatorService/CaculatorService?wsdl에 게시됩니다.WSDL 파일을 확인하면 어떤 WSSecureConversation 관련 사양도 포함하지 않음을 알 수 있습니다. 특히
<sp:SecureConversationToken>정책 논리식이나<sp:BootstrapPolicy>요소가 WSDL 파일에 없습니다. - NetBeans IDE에서 다음과 같이
CalculatorClient프로젝트를 엽니다.- File 메뉴에서 Open Project를 선택합니다.
- 샘플 애플리케이션 다운로드에서
sc_samples디렉토리로 이동합니다. - Open Project 창에서 CalculatorClient를 선택합니다.
- Open Project Folder 버튼을 클릭합니다.
CalculatorClient는CalculatorService서비스의 클라이언트입니다. - 다음과 같이
CalculatorClient프로젝트를 실행합니다.- Projects 창에서 CalculatorClient 노드를 마우스 오른쪽 버튼으로 클릭합니다.
- Run을 선택합니다.
그림 6과 비슷한 결과가 나타납니다.
그림 6. CalculatorClient 결과
표시된 Time 값에서 각 프로젝트의 실행 시간을 비교하십시오. 보안 대화를 활성화한 상태에서 계산기 서비스를 실행하는 경우, 걸리는 시간이 훨씬 적습니다.
현재 클라이언트는 계산기 서비스에 5번 액세스합니다. 클라이언트가 계산기 서비스를 호출하는 횟수를 조정하고, 그것이 각 프로젝트의 실행 시간에 어떻게 영향을 주는지 확인할 수 있습니다.
저자 정보
Jiandong Guo는 애플리케이션 서버 웹 서비스 보안 그룹의 시니어 멤버이자 스태프 엔지니어입니다. 그는 Tango 프로젝트에서 WS-SecureConversation 및 WS-Trust 기반의 솔루션 및 구현의 개발을 이끌어 왔습니다.
이 글의 영문 원본은
Secure Conversations for Web Services With Metro
에서 보실 수 있습니다.
--------------------------------------------------------------------------------------------------------------------
|
자바 EE SDK 리프레시
자바 EE 5 SDK 및 자바 애플리케이션 플랫폼 SDK의 업데이트 4 버전이 현재 다국어를 지원합니다. "+ JDK" 번들에는 최신 자바 SE 6(JDK) 업데이트 5도 포함되어 있습니다. 지금 SDK를 다운로드하십시오.
|
MySQL 공동 번들 GlassFish 릴리스
썬 자바 시스템 애플리케이션 서버 9.1 업데이트 1(GlassFish v2 UR1)이 현재 MySQL 커뮤니티 서버 오픈 소스 데이터베이스에 번들되어 제공되고 있습니다. 자세한 내용은 릴리스 노트와 이 블로그를 참조하십시오. 지금 다운로드하십시오.
"Java EE" 카테고리의 다른 글
- Metro를 이용한 웹 서비스용 보안 대화 (댓글 0개 / 트랙백 0개) 2008/04/07
- GlassFish v2: Open for Business (댓글 0개 / 트랙백 0개) 2008/02/13
- JSP 2.0 EXPRESSION LANGUAGE (댓글 1개 / 트랙백 0개) 2004/02/05
- JAVA SERVLET 2.4 API에서 향상된 국제화 기능 (댓글 1개 / 트랙백 0개) 2005/06/08
- P6Spy 및 GlassFish 연결 풀을 사용하여 데이터베이스 작업 추적 (댓글 0개 / 트랙백 0개) 2008/08/13
- JDBC 연습하기 (댓글 1개 / 트랙백 0개) 2004/04/28
- 커스텀 태그 파일 (댓글 1개 / 트랙백 0개) 2004/03/05
- JSP 2.1에서 ELResover 커스터마이즈하기 (댓글 5개 / 트랙백 0개) 2007/03/13
- 클라이언트 상에서 JAX-WS 핸들러 구성하기 (댓글 2개 / 트랙백 0개) 2006/11/22
- 자바 클라이언트 또는 Java Web Start 기술을 통해 시큐어 엔터프라이즈 빈에... (댓글 2개 / 트랙백 0개) 2006/04/05





댓글을 달아 주세요