 |
|
난이도 : 중급 John Hsu, Software engineer, IBM
2008 년 4 월 22 일 이 글에서는 IBM Lotus Expeditor 툴킷을 사용해 안전한 웹 서비스를 만들고 이를 IBM Lotus Expeditor 클라이언트에서 작동하는 방법을 다룹니다. 또한 WS 보안에 관한 기본 지식을 얻을 수 있습니다.
IBM Lotus Expeditor는 클라이언트, 서버, 툴링을 포함한 프레임워크로 엔터프라이즈 애플리케이션에 통합 환경을 제공한다. IBM Lotus Expeditor 클라이언트는 eRCP에서 만들어지고 J2EE와 IBM 자체 엔터프라이즈 애플리케이션 컴포넌트를 eRCP에 추가한다. IBM Lotus Expeditor 서버는 Lotus Expeditor 클라이언트와 상호 작용하고 IBM 서버 소프트웨어와 잘 통합되기 때문에 Lotus Expeditor 상에 SOA(서비스 지향 아키텍처) 솔루션을 만드는 좋은 엔트리 포인트를 제공한다. Lotus Expeditor는 또한 OSGi 얼라이언스엔 익숙치 않지만 J2EE를 아는 경우 도움이 되는 툴킷을 제공함으로써 Lotus Expeditor의 애플리케이션을 쉽고 빠르게 만들 수 있다.
Lotus Expeditor는 JSR-172를 따라 기본적인 웹 서비스 지원을 제공하고, 몇 가지 다른 명세를 구현하여 더 강화된 웹 서비스 지원을 제공한다. 그 중 하나가 웹 서비스를 통해 데이터를 안전하게 교환할 수 있는 WS-Security 구현이다. Lotus Expeditor는 OASIS에서 나온 WS-Security의 MProf(Minimalist Profile) 보안 프로파일의 부분 집합을 지원한다. IBM Lotus Expeditor 툴킷으로 WS-Security에 관련된 설정을 쉽게 할 수 있어 WS-Security의 복잡한 XML 태그를 처리할 필요가 없다. 하지만 더 향상된 WS-Security 기능을 사용하려면 WS-Security에 대한 기본적인 이해가 필요하다.
이 글은 XML, 자바, 웹 서비스, OSGi 프레임워크에 익숙하고 이클립스 3.x 기술을 사용한 암호화, 디지털 서명 알고리즘, 플러그인 개발에 대한 기본 지식이 있어야 제대로 이해할 수 있다.
이 글의 예제를 완성하려면 WebSphere Software 7.0과 Lotus Expeditor Toolkit V6.1을 위한 IBM Rational Application Developer, Lotus Expeditor가 설치되어 있어야 한다. 이클립스 3.2로는 부족하다. 웹 서비스 보안을 위한 GUI 편집기가 이클립스 3.2에서는 작동하지 않기 때문이다.
WS-Security 소개
WS-Security는 OASIS에 의해 발행된 오픈 표준이다. 이 명세의 목표는 애플리케이션이 안전한 SOAP 메시지를 교환할 수 있도록 하는 것이다. 이 명세는 어떤 새로운 보안 프로토콜을 만드는 대신 웹 서비스에서 기존 보안 프로토콜을 사용할 수 있도록 유연한 메커니즘 세트를 제공한다. WS-Security를 이해하려면 XML 암호화와 XML 서명을 먼저 알아야 한다.
XML 암호화
XML 암호화는 W3C(월드 와이드 웹 컨소시엄)이 발행한 오픈 명세다. XML 태그 세트를 정의하고 이를 기존 암호화 알고리즘에 사용해 XML 문서를 암호화하는 방법을 지정했다. 이를 이해하는 가장 좋은 방법은 예제를 사용하는 것이다. XML 문서에 신용카드 정보를 가지고 있다고 가정하고 Listing 1을 보자.
Listing 1. 신용카드 정보 예제
<?xml version='1.0'?>
<PaymentInfo xmlns='http://example.org/payment'>
<Name>Eric Johnson</Name>
<CreditCard Limit='10,000' Currency='USD'>
<Number>4033 0309 2377 5438</Number>
<Issuer>My Bank</Issuer>
<Expiration>08/12</Expiration>
</CreditCard>
</PaymentInfo>
|
다른 사람에게 CreditCard 엘리먼트의 정보를 알리고 싶지 않으므로 XML 암호화를 사용해 Listing 2처럼 이 엘리먼트를 암호화한다.
Listing 2. 암호화된 신용카드 정보 예제
<?xml version='1.0'?>
<PaymentInfo xmlns='http://example.org/paymentv2'>
<Name>Eric Johnson</Name>
<EncryptedData xmlns='http://www.w3.org/2001/04/xmlenc#'
Type='http://www.w3.org/2001/04/xmlenc#Element'/>
<EncryptionMethod Algorithm='http://www.w3.org/2001/04/xmlenc#tripledes-cbc'/>
<ds:KeyInfo xmlns:ds='http://www.w3.org/2000/09/xmldsig#'>
<ds:KeyName>Eric Johnson</ds:KeyName>
</ds:KeyInfo>
<CipherData><CipherValue>ABCDEFG</CipherValue></CipherData>
</EncryptedData>
</PaymentInfo>
|
다음 사항을 주의하자.
- CreditCard 엘리먼트는 XML 암호화에 의해 암호화된다. EncryptedData는 사용된 암호화 알고리즘을 지시하는 EncryptionMethod를 포함한다.
- KeyInfo는 키를 갖는 방법에 대한 수령인 정보를 준다.
- CipherData는 CreditCard 엘리먼트의 암호화된 내용이다.
XML 암호화는 예제에서 나타난 것보다 복잡하지만 예제는 개념을 보여주므로 이 글을 이해할 수 있을 것이다.
XML 서명
XML 암호화처럼 XML 서명도 W3C가 발행하는 오픈 명세로 XML 태그 세트를 정의하고 이를 기존의 서명 알고리즘을 사용해 XML 문서에 서명하는 방법을 지정한다. Listing 3은 간단한 예제를 보여준다.
Listing 3. 서명 예제
<Signature Id="SampleSignature"
xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod
Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/>
<Reference
URI="http://www.w3.org/TR/xml-stylesheet/">
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>dadavpoqjepgqpoj3fj99eq9j8nk=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>DOADJVOJOEUYYQM</SignatureValue>
<KeyInfo>
<KeyValue>
<DSAKeyValue>
<A>...</A><D>...</D><G>...
</G><R>...</R>
</DSAKeyValue>
</KeyValue>
</KeyInfo>
</Signature>
|
전체 서명은 서명 엘리먼트에 의해 표현된다. CanonicalizationMethod는 서명이 계산되기 전에 SignedInfo를 규범화(canonicalize)하는 데 사용하는 알고리즘이다. SignatureMethod는 이 데이터 객체를 서명하는 데 사용되는 알고리즘을 나타낸다. Reference의 URI 속성은 리소스에 레퍼런스를 포함하는데, 이런 경우 http://www.w3.org/TR/xml-stylesheet/다. DigestMethod는 데이터 객체를 분류하는 데 쓰이는 알고리즘이고 DigestValue는 내용이 분류된 후의 값이다. SignatureValue는 서명 프로세스가 완료된 후의 값이다. KeyInfo 엘리먼트는 서명 키를 갖는 수령자 정보를 준다.
XML 서명 프로세스는 XML 암호화보다 더 복잡하다. 다음의 자세한 단계를 따라 데이터 객체에 대한 XML 서명을 생성해 보자.
-
레퍼런스 생성하기
서명된 각 데이터 객체에 다음을 적용하자.
- 애플리케이션이 결정한 대로 데이터 객체에 Transformation을 적용한다. 이 단계는 선택적으로 이번 예제에서는 적용하지 않는다.
- 데이터 객체를 통해 분류된 값을 계산한다.
- 데이터 객체의 ID(선택적), 변환 엘리먼트(선택적), 분류 알고리즘, DigestValue를 포함하는 Reference 엘리먼트를 만든다.
-
서명 생성하기
서명된 각 데이터 객체에 다음을 적용하자.
- SignatureMethod, CanonicalizationMethod, References와 함께 SignedInfo 엘리먼트를 만든다.
- 규범화하고 난 후 SignedInfo에 지정된 알고리즘을 기초로 한 SignedInfo를 통해 SignatureValue를 계산한다.
- SignedInfo, Object(이 예제에서는 다루지 않는다), KeyInfo(필요한 경우), SignatureValue를 포함하는 Signature 엘리먼트를 만든다. 다시 말하지만 XML 서명은 이 예제에서 나타난 것보다 복잡한데 여기서는 그 개념만 설명한다.
WS-Security
WS-Security는 XML 암호화와 XML 서명 상에 만들어져 웹 서비스에 보안 솔루션을 제공한다. 이 명세는 세 가지 주요 메커니즘을 제공한다.
- 메시지의 한 부분으로 보안 토큰을 보내는 기능
- 메시지 무결성
- 메시지 기밀성
WS-Security는 XML 암호화를 사용해 메시지 기밀성을 제공하고, XML 서명으로 메시지 무결성과 보안 토큰을 제공해 웹 서비스의 보안 솔루션을 만든다. WS-Security는 지금까지 가장 잘 알려진 웹 서비스의 보안 명세로 Lotus Expeditor는 이 명세를 구현해 안전한 웹 서비스를 제공한다.
Listing 4는 웹 서비스가 Lotus Expeditor로 생성된 SOAP 메시지를 요청하는 예제를 보여준다.
Listing 4. SOAP 메시지 요청하기
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
- <soapenv:Header>
- <w:Security xmlns:w="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-
wssecurity-secext-1.0.xsd"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
soapenv:mustUnderstand="1">
<w:BinarySecurityToken xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-
200401-wss-wssecurity-utility-1.0.xsd"
EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-
message-security-1.0#Base64Binary"
ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-
profile-1.0#X509"
u:Id="x509bst__8924027784298412302_1171243809506">…
</w:BinarySecurityToken>
- <e:EncryptedKey xmlns:e="http://www.w3.org/2001/04/xmlenc#">
<e:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
- <d:KeyInfo xmlns:d="http://www.w3.org/2000/09/xmldsig#">
….
</d:KeyInfo>
- <e:CipherData>
<e:CipherValue>…</e:CipherValue>
</e:CipherData>
- <e:ReferenceList>
<e:DataReference URI="#wss_encryption_id_378629557415344846_1171243810598" />
</e:ReferenceList>
</e:EncryptedKey>
- <d:Signature xmlns:d="http://www.w3.org/2000/09/xmldsig#">
- <d:SignedInfo xmlns:d="http://www.w3.org/2000/09/xmldsig#"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:w="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext
-1.0.xsd">
......
<d:Reference URI="#wss_signature_id_1528272557003819498_1171243809516">
……
</d:SignedInfo>
<d:SignatureValue>…</d:SignatureValue>
- <d:KeyInfo>
- <w:SecurityTokenReference>
<w:Reference URI="#x509bst__8924027784298412302_1171243809506"
ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token
-profile-1.0#X509" />
</w:SecurityTokenReference>
</d:KeyInfo>
</d:Signature>
</w:Security>
</soapenv:Header>
- <soapenv:Body xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility
-1.0.xsd"
u:Id="wss_signature_id_1528272557003819498_1171243809516">
- <e:EncryptedData xmlns:e="http://www.w3.org/2001/04/xmlenc#"
Id="wss_encryption_id_378629557415344846_1171243810598"
Type="http://www.w3.org/2001/04/xmlenc#Content">
…..
</e:EncryptedData>
</soapenv:Body>
</soapenv:Envelope>
|
여기서 볼 수 있듯이 WS-Security는 XML 암호화를 사용해 메시지를 암호화하고 XML 서명으로 메시지를 서명한다. WS-Security 와 XML 암호화/XML 서명의 가장 큰 차이점은 WS-Security는 보안 토큰을 자체에 가지고 있다는 것이다. WS-Security는 두 종류의 보안 토큰을 정의하는데, 그 중 하나가 Username 토큰으로 다음과 같다.
<wsse:UsernameToken wsu:Id="...">
<wsse:Username>...</wsse:Username>
</wsse:UsernameToken>
Username 토큰은 사용자 이름을 통해 신원을 요구할 때 사용한다. 이는 아주 간단한 방법이지만 가끔 유용하게 쓰이는 접근법이다.
WS-Security는 또한 바이너리 보안 토큰(Binary Security Token)을 정의한다. 앞의 코드에서 보안 토큰은 바이너리 보안 토큰을 가지고 있는데, 이는 디지털 인증에 사용되기도 한다. 이 경우 X.509 인증을 전달한다. 이 바이너리 보안 토큰 또한 wsu:Id 속성을 가지고 있는데, 이 속성은 나중에 키 정보를 제공하는 XML Signature 엘리먼트의 w:SecurityTokenReference에 사용된다. 이 레퍼런싱 메커니즘 또한 WS-Security의 중요한 부분이다.
WS-Security가 가능한 모바일 웹 서비스 제공자 프로젝트 만들기
이제 Rational Application Developer 7.0과 Lotus Expeditor 툴킷을 사용해 WS-Security가 가능한 웹 서비스 제공자 프로젝트를 만드는 방법을 설명하겠다.
- Rational Application Developer에서 Window->Open Perspective->Plug-in Development를 선택해 Plug-in Development 퍼스펙티브로 전환한다.
- File-> New->Project를 선택해 New Project 마법사를 연다.
- New Project 마법사에서 Client Services Project를 선택하고 Next를 클릭한다.
- 그림 1처럼 Client Services Project 마법사에서 Project 이름 필드에 WSSProvider를 입력하고 Next를 클릭한다.
그림 1. Client Services Project 만들기
- 다음 창에서 기본 설정을 바꾸지 않고 Finish를 클릭한다.
- 인터페이스 WSSService를 만들고 여기에 getResult() 메서드를 추가한다. Listing 5를 보자.
Listing 5. WSSService 인터페이스
package wssprovider;
public interface WSSService {
public String getResult();
}
|
- Listing 6처럼 WSSService를 구현하는 클래스 WSSServiceImpl을 만든다.
Listing 6. WSSService 구현하기
package wssprovider;
public class WSSServiceImpl implements WSSService {
public String getResult() {
return "This is WSSServiceImpl";
}
}
|
- 2번처럼 New Project 마법사를 연다. 이번엔 Mobile Web Services Provider를 선택하고 Next를 클릭한다.
- 자바 파일 필드에서 WSSServiceImpl.java를 선택하고 노출하고자 하는 인터페이스로 wssprovider.WSSService를 선택한 후 Configure Security 옵션을 선택한다.
그림 2. Mobile Web Services Provider 만들기
- 맞춤 데이터 유형이 없으므로 Data Type Marshalling 창에서 Next를 클릭한다.
- Web Services Security 설정 창(그림 3을 보자)에서 다음을 입력하자.
- Web Services Name 필드에 WSSServiceService를 입력한다.
- Web Services Port 필드에 WSSService를 입력한다.
- Use template configuration 옵션을 선택하고 Client 필드에 "Lotus Expeditor 6.1.x and WED 6.0"을 입력한다. Security template 필드에서는 Signing and encryption을 선택한다.
- Finish를 클릭한다.
그림 3. Web Services Security 설정하기
Client type 필드에서 Lotus Expeditor 6.1.x and WED 6.0를 선택한 이유는 제공자를 Lotus Expeditor 런타임에서 실행하려고 했기 때문이다. IBM WebSphere Application Server에서 제공자를 실행하려면 드롭다운 목록에서 가지고 있는 버전에 맞는 WebSphere Application Server를 선택하기 바란다.
- 제공자를 생성한 후 Lotus Expeditor 툴킷으로 생성한 wssecurity.xml 파일을 연다. 그러면 그림 4와 같은 Web Services security 설정 편집기가 보일 것이다.
그림 4. Web Services Security Extensions 설정 페이지
Web Services Security Extensions 탭에서는 적용할 보안 정책을 정의하고 Web Services Security Binding 탭에서는 이 정책들을 적용하는 법을 정의한다. 이에 대해서는 우리의 웹 서비스 프로젝트를 마친 후에 다루겠다.
WS-Security가 가능한 모바일 웹 서비스 컨슈머 프로젝트 만들기
이번 절에서는 Rational Application Developer 7.0과 Lotus Expeditor 툴킷으로 소프트웨어 보안이 가능한 웹 서비스 컨슈머 프로젝트를 만드는 방법에 대해 설명하겠다.
- "WS-Security가 가능한 모바일 웹 서비스 제공자 프로젝트 만들기"의 2-5단계를 반복하고 프로젝트 이름을 WSSConsumer로 바꾼다.
- File->New->Other을 선택해 New Project 마법사를 연다.
- Client Services->Mobile Web Services->Mobile Web Services Client를 선택하고 Next를 클릭한다.
- 그림 5와 같이 필드에 다음 정보를 입력한다.
- Source folder 필드에서 /WSSConsumer/src를 선택한다.
- Package 필드에 wssconsumer를 입력한다.
- WSDL location 필드에서 Settings/JYHSU/IBM/rationalsdp7.0/workspace/WSSProvider/WSSServiceImpl.wsdl을 선택한다.
- Configure Security 옵션을 선택한다.
- Next를 클릭한다.
그림 5. 모바일 웹 서비스 클라이언트 만들기
- Web Services Security 설정에서 다음 정보를 입력한다.
- Web Services Name 필드의 드롭다운 목록에서 WSSServiceService를 선택한다.
- Web Services Port의 드롭다운 목록에서 WSSService를 선택한다.
- Use template configuration 옵션을 선택한다.
- Client type 필드의 드롭다운 목록에서 Lotus Expeditor 6.1.x and WED 6.0을 선택한다.
- Security template 필드의 드롭다운 목록에서 Signing and encryption을 선택한다.
- Finish를 클릭한다.
Web Services security 설정 편집기는 제공자 프로젝트에서 본 것과 비슷하다. 이제 Web Services Extension 탭과 Web Services Binding 탭의 몇 가지 필드 사용에 대해 간단히 설명하겠다.
Web Services Extension 탭
Web Services Extension 탭은 ibm-webservices-ext.xmi의 편집기다. XMI 파일을 직접 편집하기보다는 이 편집기를 사용해 편집하는 것이 좋다. 단, 주의할 것은 이클립스에는 이 편집기가 없다는 점이다.
이 파일에는 요청(Request)과 응답(Response) 두 부분이 있다. 클라이언트 사이드의 요청 생성자(Request Generator)와 제공자 사이드의 응답 소비자(Response Consumer)는 클라이언트 사이드에서 아웃바운드 SOAP 메시지가 어떻게 보이는지, 그리고 서버가 SOAP 메시지를 어떻게 소비하는지를 정의한다. 반대로 제공자 사이드의 요청 생성자는 클라이언트 사이드의 인바운드 SOAP 메시지가 어떻게 보이는지를 정의하고 클라이언트 사이드의 응답 소비자는 클라이언트가 이 SOAP 메시지를 어떻게 소비하는지를 정의한다.
Web Services Extension과 Web Services Binding의 모든 설정은 기본적으로 Lotus Expeditor 툴킷에 의해 자동 생성된다. 아무것도 변경하지 않으면 애플리케이션이 작동한다. 이제 몇 가지 주요 필드의 기능을 설명하고 기본 설정을 바꾸는 방법을 소개하겠다.
기본적으로 생성된 확장 파일에서는 할 일이 많지 않다. 가장 중요한 것은 메시지뿐만 아니라 서명이 되고 암호화된 SOAP 메시지의 부분에 타임스탬프를 추가할 것인지 여부를 정의하는 것이다. 이들은 Integrity, Confidentiality, Add Timestamp 필드에서 정의된다. Integrity 필드를 확장하고 기존 무결성을 편집하고자 한다면 그림 6의 대화상자를 보자.
그림 6. Integrity 대화상자 설정하기
이는 SOAP 바디와 타임스탬프 엘리먼트가 서명됐다는 것을 의미한다. Add나 Remove를 클릭하고 Parts Keyword를 선택해 SOAP 메시지에서 서명하고자 하는 부분을 추가하거나 제거할 수 있다. Confidentiality 필드도 이와 비슷하다. Add Timestamp 필드는 매우 간단하므로 여기서는 다루지 않겠다.
Web Services Binding 탭
Web Services Binding 탭은 ibm-webservices-bnd.xmi의 편집기다. 웹 서비스 확장이 SOAP 메시지가 어떻게 생겼는지를 정의한다면 웹 서비스 바인딩은 각 부분을 어떻게 보호하는지 정의한다. SOAP 메시지에서 사용하고자 하는 보안 알고리즘, 키스토어(keystores), 그리고 키를 선택할 수 있다.
이를 설명하기 위해 클라이언트 사이드의 요청 생성자 Signing Information부터 시작하는 것이 좋다. 대부분의 필드가 이 필드에 의해 직접 또는 간접적으로 참조되기 때문이다. 먼저 보안 요청 생성자 바인딩을 확장하고 서명 정보를 확장하자. gen_dsig상의 Edit를 클릭해 그림 7의 설정을 보자.
그림 7. gen_dsig에서의 설정
그림 7은 XML 서명 프로세스에서 사용된 분류화 알고리즘과 서명 알고리즘을 정의한다. 드롭다운 목록에 있는 알고리즘을 선택해 알고리즘을 변경할 수 있다. Key 정보 엘리먼트는, XML 서명에서 KeyInfo 엘리먼트의 생성 방법을 정의하는 엘리먼트에 레퍼런스를 정의한다. 이제 OK를 클릭해 대화상자를 닫고 웹 서비스 바인딩 탭으로 돌아간 후 Key Information을 확장하고 gen_dsigkeyinfo상의 Edit을 클릭해 그림 8의 대화상자를 열자.
그림 8. gen_dsigkeyinfo에서의 설정
여기서 KeyInfo 엘리먼트를 만드는 방법을 정의한다. 어디서 키를 획득하는지 gen_klocator로 정의하고, 키를 포함하는 보안 토큰을 만드는 방법을 gen_dsigtgen으로 정의한다. 대화상자에서 설정을 변경하진 말자. 과정이 매우 복잡하고 조심하지 않으면 실수하기 쉽기 때문이다. 또한 사람들이 이를 잘 변경하지 않는다. 대화상자에는 참조된 gen_klocator와 gen_dsigtgen이라는 두 가지 중요한 설정 필드가 있다. 이제 OK를 클릭해 대화상자를 닫고 웹 서비스 바인딩 탭으로 돌아가자. 그리고 나서 그림 9처럼 Key Locator를 확장하고 gen_klocator상의 Edit를 선택하자.
그림 9. gen_klocator에서의 설정
Key Locator는 어디서 키를 획득하는지 정의한다. 기본적으로 Lotus Expeditor는 웹 서비스 프로젝트가 만들어질 때 생성되는 빌트인 키스토어의 키를 사용한다. 원한다면 자신의 키스토어로 바꿀 수 있다.
이제 OK를 클릭해 대화상자를 닫고 웹 서비스 바인딩 탭으로 돌아가자. 그리고 나서 토큰 생성기(Token Generator)를 확장하고 gen_dsigtgen상의 Edit을 클릭해 그림 10의 대화상자를 연다.
그림 10. gen_dsigtgen에서의 설정
이제 X.509 인증 토큰을 생성하고 기본 키스토어의 키를 사용하자. 다시 말하지만 원한다면 키스토어를 바꿀 수 있다.
이제 OK를 클릭해 대화상자를 선택하고 웹 서비스 바인딩 탭으로 돌아간다. 그리고 나서 Part References를 확장하고 int_body의 Edit를 클릭한다. 대화상자의 드롭다운 목록에서 digest와 변형 알고리즘을 바꿀 수 있다.
그림 11. int_body에서의 설정
암호화 설정은 서명 설정과 매우 비슷하고 더 쉬우므로 자세한 사항은 여기서 다루지 않겠다.
제공자와 소비자를 Lotus Expeditor 클라이언트로 배치, 실행하기
이번 절에서는 WS- Security가 가능한 웹 서비스 제공자와 소비자를 Lotus Expeditor 툴킷이 제공하는 테스트 런타임에 배치하고 실행하는 방법을 설명하겠다.
- Run->Run을 선택해 Run 마법사를 연다.
- Client Services를 선택하고 화면 왼쪽 상단의 New 아이콘을 클릭한다. 그림 12를 보자.
그림 12. Run 구성
- New_configuration 대화상자에서 Plug-ins 탭을 선택한다. 모든 플러그인이 기본으로 선택됐음을 볼 수 있다. Workspace Plug-ins 선택을 해제해 작업 공간의 모든 플러그인 확인을 해제한 후 그림 13처럼 WSSConsumer와 WSSProvider를 확인한다.
그림 13. 플러그인 탭
- Add Required Plug-ins 버튼을 클릭하고 Apply를 클릭한다.
- 그림 14처럼 Arguments 탭을 선택해 -Dcom.ibm.pvc.webcontainer.port=0을 8777로 변경한 후 Run을 클릭한다.
그림 14. Arguments 탭
- Console 탭에서 ss를 입력하고 WSSConsumer, WSSProvider, com.ibm.pvc.webcontainer, org.eclipse.equinox.http의 번들 숫자를 찾는다. 그림 15를 보자.
그림 15. 런타임 콘솔
com.ibm.pvc.webcontainer ID는 그림 16과 같다.
그림 16. com.ibm.pvc.webcontainer ID
- 번들 ID가 xx인 콘솔에 start xx를 입력해 번들 com.ibm.pvc.webcontainer와 org.eclipse.equinox.http를 시작한다.
- WSSProvider를 시작한다.
- 브라우저를 열고 http://localhost:8777/ws/pid/WSSServiceImpl에 접속해 서버가 제대로 배치됐는지 확인한다. 제대로 배치됐으면 이 웹 서비스의 WSDL이 보인다.
- WSSConsumer를 시작해 응답 메시지를 보자. 그림 17의 로그에서 요청과 응답 SOAP 메시지는 실제 보호됐음을 볼 수 있다.
그림 17. 샘플 애플리케이션이 실행된 후의 로그
로그를 확인해 어떤 SOAP이 보내졌는지 알 수 있다. 로그를 콘솔로 출력해 전달된 메시지가 보호됐는지 확인하기 바란다. 기본 설정을 사용한다면 콘솔에 로그가 없다.
결론
이 글을 통해 Lotus Expeditor가 지원하는 웹 서비스 보안 표준인 WS-Security 명세를 간단히 소개했다. 그리고 Lotus Expeditor 툴킷과 Rational Application Developer 7을 사용해 보호된 웹 서비스를 만들고 배치하고 작동하는 방법을 보여줬다. 또한 GUI 편집기를 통해 보안 설정을 튜닝하는 방법을 설명했다.
참고자료 교육
제품 및 기술 얻기
토론
필자소개  | |  | John Hsu는 대만 타이페이의 IBM 중국 소프트웨어 개발 랩에서 소프트웨어 엔지니어로 일하고 있다. 소프트웨어 개발과 테스팅 경험이 있으며 현재 Lotus Expeditor 개발에 참여 중이다. developerWorks Lotus에 "Developing an OSGi service as a Web service in IBM Lotus Expeditor"를 기고했다. |
기사에 대한 평가
 |
| 이 문서 북마킹 하기
|
|