웹 서비스의 Kerberos 사용법 개요
Kerberos 토큰을 사용하여 LTPA(Lightweight Third Party Authentication) 및 보안 통신 토큰 등과 같이 현재 다른 2진 보안 토큰을 사용하여 완료할 수 있는 것과 유사한 기능을 완료할 수 있습니다.
토큰 생성기
KDC(Key Distribution Center)에서 Kerberos 토큰을 작성한 후에 웹 서비스 보안 생성자가 토큰을 인코딩하고 이를 SOAP 메시지에 삽입하고 토큰 이용 또는 수락을 위해 토큰을 전파합니다. 메시지 무결성 또는 기밀성 키가 필수인 경우에는 Kerberos 서브 키 또는 Kerberos 티켓의 Kerberos 세션 키가 사용됩니다. 키는 Kerberos 서브 키 또는 Kerberos 세션 키에서 얻을 수 있습니다. 웹 서비스 보안은 Kerberos 토큰의 키를 사용하여 OASIS 웹 서비스 보안 Kerberos 토큰 프로파일 버전 1.1 스펙에 설명된 대로 메시지 파트에 서명 및 암호화합니다. 사용할 키 유형은 웹 서비스 보안 구성 또는 정책에 의해 사전에 결정되어 있습니다. 또한 파생된 키의 크기도 구성 가능합니다.
- Kerberos 서브 키가 인증기에 있을 때
- 서브 키가 없는 경우 티켓에서 직접 가져온 세션 키
- 이전 키 중 하나에서 파생된 키
- http://www.w3.org/2001/04/xmlenc#aes128-cbc
- http://www.w3.org/2001/04/xmlenc#aes256-cbc
- http://www.w3.org/2001/04/xmlenc#tripledes-cbc
- 애플리케이션 서버는 Kerberos 버전 5만을 지원합니다.
- Kerberos 티켓이 RFC-4120만을 준수하는 경우에는 웹 서비스 보안에서 AES 유형 대칭 알고리즘 제품군을 사용할 수 있습니다.
- KDC가 Microsoft Windows 2003 서버에 있는 경우에는 RC4-HMAC 128비트 키 유형이 있는 Kerberos 키만이 사용됩니다.
- KDC가 Microsoft Windows 2008 서버에 있는 경우에는 AES 128비트 또는 256비트 키 유형이 있는 Kerberos 키가 사용됩니다.
- 서비스 제공자가 클러스터에서 실행 중일 때에는 Kerberos 티켓은 전달 가능해야 하며 주소를 포함하면 안됩니다.
- AES 256비트 암호화 알고리즘을 사용할 때에는 제한되지 않은 Java™ 보안 정책을 가져와야 합니다.
크로스 또는 신뢰 범주 환경에서 Kerberos 토큰 사용에 대한 자세한 정보는 "단일, 크로스 또는 신뢰 범주 환경에서 Kerberos 토큰 보안" 주제를 읽으십시오.
토큰 이용자
웹 서비스 보안 이용자는 SOAP 메시지로부터 Kerberos 토큰을 수신 및 추출합니다. 그런 다음 이용자는 자체 보안 키를 사용하여 토큰의 유효성을 확인하여 Kerberos 토큰을 수락합니다. 서비스의 비밀 키는 내보낸 키탭 파일에 저장되어 있습니다. 수락 후에는 웹 서비스 보안 이용자가 연관된 요청 토큰 정보를 컨텍스트 주제에 저장합니다. 해당하는 키를 요청 토큰으로 파생할 수도 있습니다. 키는 메시지를 확인 및 복호화하는 데 사용됩니다. 요청 토큰이 전달 가능하고 주소를 포함하지 않는 경우 애플리케이션 서버는 다운스트림 호출을 위해 저장된 토큰을 사용할 수 있습니다.
토큰 형식 및 참조
JAX-WS 애플리케이션의 경우 기존 사용자 정의 정책 세트 또는 사용자 정의 정책의 관리 명령 스크립트를 사용하여 Kerberos 토큰 유형, 메시지 서명 및 메시지 암호화를 지정할 수 있습니다. WebSphere® Application Server의 JAX-WS 프로그래밍 모델은 Kerberos 토큰과 함께 Kerberos 토큰 프로파일을 사용 가능하게 하기 위해 최소의 구성을 제공합니다.
JAX-RPC 애플리케이션의 경우 배치 디스크립터를 사용하여 사용자 정의 토큰이 Kerberos 토큰을 사용함을 지정합니다. 인증을 위해 Kerberos 토큰을 사용할 수 있지만 메시지 서명이나 암호화에는 사용할 수 없습니다.
- com.ibm.websphere.wssecurity.callbackhandler.KRBTokenConsumeCallbackHandler
이 클래스는 이용자측의 Kerberos 버전 5 토큰에 대한 콜백 핸들러입니다. 이 인스턴스는 Kerberos 2진 보안 토큰을 유효성 검증하기 위해 WSSVerification 및 WSSDecryption을 생성하는데 사용됩니다.
- com.ibm.websphere.wssecurity.callbackhandler.KRBTokenGenerateCallbackHandler
이 클래스는 생성자측의 Kerberos 버전 5 토큰에 대한 콜백 핸들러입니다. 이 인스턴스는 Kerberos 2진 보안 토큰을 생성하기 위해 WSSSignature 오브젝트 및 WSSEncryption 오브젝트를 생성하는 데 사용됩니다.
OASIS 웹 서비스 보안 Kerberos 토큰 프로파일 버전 1.1 스펙은 Kerberos 토큰이 <wsse:BinarySecurityToken> 요소와 함께 SOAP 메시지에 첨부되어 있음을 지정합니다. 다음 예제는 메시지 형식을 보여 줍니다. 굵은체 유형은 예제의 다른 파트의 2진 보안 토큰 정보를 기술합니다.
<S11:Envelope xmlns:S11="…" xmlns:wsu="…">
<S11:Header>
<wsse:Security xmlns:wsse="…">
<wsse:BinarySecurityToken
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/
oasis-wss-kerberos-token-profile-1.1#Kerberosv5_AP_REQ"
wsu:Id="MyToken">boIBxDCCAcCgAwIBBaEDAgEOogcD…
</wsse:BinarySecurityToken>
…
</wsse:Security>
</S11:Header>
<S11:Body>
…
</S11:Body>
</S11:Envelope>
Kerberos 토큰은 <wsse:SecurityTokenReference> 요소에 의해 참조됩니다. <wsse:BinarySecurityToken> 요소 내에 지정되고 다음 예제 내에서 굵은체 유형으로 표시된 <wsu:Id> 요소는 <wsse:SecurityTokenReference> 요소의 토큰을 직접 참조합니다.
<wsse:SecurityTokenReference> 요소 내의 @wsse:TokenType 속성 값은 <wsse:BinarySecurityToken> 요소의 ValueType 속성 값과 일치합니다. Reference/@ValueType 속성은 필수가 아닙니다. 그러나 속성이 지정된 경우에는 해당 값은 @wsse11:TokenType 속성과 동일해야 합니다.
<S11:Envelope xmlns:S11="…" xmlns:wsu="…">
<S11:Header>
<wsse:Security xmlns:wsse="…">
<wsse:BinarySecurityToken
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/
oasis-wss-kerberos-token-profile-1.1#Kerberosv5_AP_REQ"
wsu:Id="MyToken">boIBxDCCAcCgAwIBBaEDAgEOogcD…
</wsse:BinarySecurityToken>
</wsse:Security>
</S11:Header>
</S11:Envelope>
<wsse:Security>
</wsse:Security>
<wsse:SecurityTokenReference
TokenType="http://docs.oasis-open.org/wss/
oasis-wss-kerberos-token-profile-1.1#Kerberosv5_AP_REQ">
<wsse:Reference URI="#MyToken"
ValueType="http://docs.oasis-open.org/wss/
oasis-wss-kerberos-token-profile-1.1#Kerberosv5_AP_REQ">
</wsse:Reference>
</wsse:SecurityTokenReference>
…
<wsse:Security>
</wsse:Security>
<S11:Header>
</S11:Header>
<S11:Body>
…
</S11:Body>
<S11:Envelope>
</S11:Envelope>
<wsse:KeyIdentifier> 요소는 Kerberos 토큰에 ID를 지정하는 데 사용됩니다. ID의 값은 이전 메시지에서 인코딩된 Kerberos 토큰의 SHA1 해시 값입니다. 요소에는 #Kerberosv5APREQSHA1 값이 있는 ValueType 속성이 있어야 합니다. 초기 Kerberos 토큰이 수락된 후에 후속 메시지 교환 시에는 KeyIdentifier 참조 메커니즘이 사용됩니다. 다음 예제는 키 ID 정보를 굵은체 유형으로 표시합니다.
<S11:Envelope xmlns:S11="…" xmlns:wsse="…" xmlns:wsu="…">
<S11:Header>
<wsse:Security>
…
<wsse:SecurityTokenReference
wsse11:TokenType=http://docs.oasis-open.org/wss/
oasis-wss-kerberos-token-profile-1.1#Kerberosv5_AP_REQ>
<wsse:KeyIdentifier
ValueType="http://docs.oasis-open.org/wss/
oasis-wss-kerberos-token-profile-1.1#Kerberosv5APREQSHA1">
GbsDt+WmD9XlnUUWbY/nhBveW8I=
</wsse:KeyIdentifier>
</wsse:SecurityTokenReference>
…
</wsse:Security>
</S11:Header>
<S11:Body>
…
</S11:Body>
</S11:Envelope>
Kerberos 토큰에 대한 다중 참조
서버가 Kerberos ID의 유효성을 검증하고 수락한 후에는 클라이언트가 요청 시마다 Kerberos 토큰을 전송할 필요가 없습니다. OASIS 웹 서비스 보안 Kerberos 토큰 프로파일 버전 1.1 스펙은 초기 AP_REQ 패킷이 수락된 후에 모든 후속 메시지에 대해 <wsse:SecurityTokenReference> 요소 내의 <wsse:KeyIdentifier> 요소가 있는 SHA1 인코딩된 키를 사용할 것을 제안합니다. 그러나 웹 서비스 보안의 런타임 환경은 키 ID를 추가로 처리하기 위해 캐싱된 Kerberos 토큰으로 맵핑해야 합니다. IBM® WebSphere Application Server 7.0 이상은 기본적으로 프로파일에 설명된 대로 이 SHA1 캐싱을 지원합니다. 그러나 애플리케이션 서버는 또한 기존의 서비스 Kerberos 티켓을 사용하여 각 요청마다 새로운 AP_REQ 토큰을 생성하는 기능도 제공합니다. Microsoft .NET와 상호 운용하는 경우에는 pSHA1 캐싱을 사용하지 마십시오. 각 요청마다 AP_REQ 패킷을 생성하십시오.