GSSContext
GSSContext (GSS 보안 컨텍스트)
GSS-API 보안 컨텍스트를 캡슐화하고 그 컨텍스트 위에서 사용할 수 있는 보안 서비스를 제공하는 인터페이스입니다.
본문
보안 컨텍스트는 로컬에서 획득한 자격증명을 사용해 피어 간에 수립됩니다. 한 쌍의 피어 사이에 같은 자격증명 집합이나 다른 자격증명 집합을 사용하는 여러 컨텍스트가 동시에 존재할 수 있어요. GSS-API는 기본 전송 프로토콜과 무관하게 동작하고, 보안 컨텍스트가 생성한 토큰을 피어 사이에서 운반하는 것은 호출 애플리케이션의 몫입니다.
호출자가 기본 GSSManager 인스턴스로 컨텍스트를 만들면 Kerberos v5 GSS-API 메커니즘이 보장됩니다. 이 메커니즘은 Oid "1.2.840.113554.1.2.2"로 식별되며 RFC 1964에 정의되어 있어요. 컨텍스트 수립이 시작되기 전에 시작자는 수립될 컨텍스트의 특정 특성을 요청할 수 있고, 수립 후에는 다양한 조회 메서드로 실제 특성과 서비스를 확인할 수 있습니다. 기본 GSSManager 인스턴스의 Kerberos v5 메커니즘에서는 상호 인증, 자격증명 위임, 기밀성·무결성 보호, 메시지별 재생(replay) 탐지와 순서 확인 등 모든 선택 서비스가 로컬에서 제공됩니다. GSS-API에서 메시지 무결성은 메시지 기밀성의 전제 조건이에요.
컨텍스트 수립은 시작자가 initSecContext를, 수락자가 acceptSecContext를 호출하며 컨텍스트가 수립될 때까지 반복되는 루프로 진행됩니다. 이 과정에서 생성된 토큰을 애플리케이션이 피어로 보내고, 피어는 그 토큰을 자신의 acceptSecContext나 initSecContext에 입력으로 전달해요. 컨텍스트가 더 이상 필요 없으면 dispose를 호출해 사용 중인 시스템 리소스를 해제해야 합니다.
이 인터페이스의 어떤 메서드도 동기화되지 않으므로, 애플리케이션 수준 동기화가 없다면 여러 스레드가 하나의 GSSContext를 공유하는 것은 바람직하지 않아요. 또 Java SE 11에서 GSSContext의 스트림 기반 메서드들(initSecContext(InputStream, OutputStream) 등)은 폐기되었습니다. 왜냐하면 와이어 프로토콜은 라이브러리가 아니라 애플리케이션이 정의해야 하고, 자기 프레이밍이 없는 토큰에서는 이 메서드들을 올바르게 구현할 수 없기 때문이에요.
static final int DEFAULT_LIFETIME
static final int INDEFINITE_LIFETIME
byte[] initSecContext(byte[] inputBuf, int offset, int len) throws GSSException
int initSecContext(InputStream inStream, OutputStream outStream) throws GSSException
byte[] acceptSecContext(byte[] inTok, int offset, int len) throws GSSException
int acceptSecContext(InputStream inStream, OutputStream outStream) throws GSSException
void requestMutualAuth(boolean state) throws GSSException
void requestConf(boolean state) throws GSSException
void requestInteg(boolean state) throws GSSException
void requestCredDeleg(boolean state) throws GSSException
boolean getMutualAuthState()
boolean getConfState()
boolean getIntegState()
boolean getCredDelegState()
boolean isEstablished()
int wrap(byte[] inBuf, int offset, int len, MessageProp msgProp) throws GSSException
byte[] unwrap(byte[] inBuf, int offset, int len, MessageProp msgProp) throws GSSException
int getMIC(byte[] inMsg, int offset, int len, MessageProp msgProp) throws GSSException
void verifyMIC(byte[] inTok, int tokOffset, int tokLen, byte[] inMsg, int msgOffset, int msgLen, MessageProp msgProp) throws GSSException
void dispose() throws GSSException
getMIC와 verifyMIC는 메시지 무결성 체크섬을 만들고 검증하며, wrap과 unwrap은 메시지를 암호화하거나 복호화합니다.