public interface GSSContext
如果调用者使用默认的GSSManager
实例来实例化上下文,则Kerberos v5 GSS-API机制被保证可用于上下文建立。 该机制由Oid“1.2.840.113554.1.2.2”标识,并在RFC 1964中定义。
在上下文建立阶段被启动之前,上下文发起者可以请求所建立的上下文所需的特定特征。 并非所有底层机制都支持呼叫者可能希望的所有特征。 在上下文建立之后,呼叫者可以通过各种查询方法检查该上下文提供的实际特性和服务。 当使用默认的GSSManager
实例提供的Kerberos v5 GSS-API机制时,所有可选服务将在本地可用。 它们是相互认证,凭证授权,机密性和完整性保护以及每消息重放检测和排序。 请注意,在GSS-API中,消息完整性是消息机密性的先决条件。
上下文建立发生在发起者调用initSecContext
并且接受者调用acceptSecContext
的循环中,直到上下文建立为止。 在此循环中, initSecContext
和acceptSecContext
方法产生应用程序发送给对等体的令牌。 对等体通过任何这样的令牌作为输入到其acceptSecContext
或initSecContext
视情况而定)。
在上下文建立阶段期间,可以调用isProtReady
方法来确定上下文是否可以用于wrap
和getMIC
的每消息操作 。 这允许应用程序对尚未完全建立的上下文使用每个消息操作。
在上下文建立或isProtReady
方法返回true
之后,可以调用查询例程来确定已建立上下文的实际特性和服务。 该应用程序还可以开始使用wrap
和getMIC
的每消息方法来获取应用程序提供的数据的加密操作。
当上下文不再需要时,应用程序应该调用dispose
来释放上下文可能使用的任何系统资源。
安全上下文通常维护关于其处理的令牌的排序和重放检测信息。 因此,将任何令牌呈现给该上下文以用于处理的顺序可能是重要的。 另请注意,此界面中的任何方法都不同步。 因此,除非有某些应用程序级别同步,否则不建议在多个线程之间共享GSSContext
。
最后,不同的机制提供者可能会对使用GSS-API上下文设置不同的安全限制。 这些将由机构提供者记录。 如果在机制层中进行这种检查,应用程序将需要确保它具有适当的权限。
下面提供的示例代码演示了启动对等体的GSSContext
接口的用法。 介绍了GSSContext
对象的不同操作,包括:对象实例化,所需标志的设置,上下文建立,实际上下文标识查询,应用数据的每消息操作,以及最后的上下文删除。
// Create a context using default credentials
// and the implementation specific default mechanism
GSSManager manager ...
GSSName targetName ...
GSSContext context = manager.createContext(targetName, null, null,
GSSContext.INDEFINITE_LIFETIME);
// set desired context options prior to context establishment
context.requestConf(true);
context.requestMutualAuth(true);
context.requestReplayDet(true);
context.requestSequenceDet(true);
// establish a context between peers
byte []inToken = new byte[0];
// Loop while there still is a token to be processed
while (!context.isEstablished()) {
byte[] outToken
= context.initSecContext(inToken, 0, inToken.length);
// send the output token if generated
if (outToken != null)
sendToken(outToken);
if (!context.isEstablished()) {
inToken = readToken();
}
// display context information
System.out.println("Remaining lifetime in seconds = "
+ context.getLifetime());
System.out.println("Context mechanism = " + context.getMech());
System.out.println("Initiator = " + context.getSrcName());
System.out.println("Acceptor = " + context.getTargName());
if (context.getConfState())
System.out.println("Confidentiality (i.e., privacy) is available");
if (context.getIntegState())
System.out.println("Integrity is available");
// perform wrap on an application supplied message, appMsg,
// using QOP = 0, and requesting privacy service
byte [] appMsg ...
MessageProp mProp = new MessageProp(0, true);
byte []tok = context.wrap(appMsg, 0, appMsg.length, mProp);
sendToken(tok);
// release the local-end of the context
context.dispose();
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_LIFETIME
表示默认上下文生存期的生命周期常数。
|
static int |
INDEFINITE_LIFETIME
一个代表不确定上下文生命周期的生命周期。
|
Modifier and Type | Method and Description |
---|---|
byte[] |
acceptSecContext(byte[] inToken, int offset, int len)
在从对等体接收到令牌时,由上下文接受者调用。
|
void |
acceptSecContext(InputStream inStream, OutputStream outStream)
由上下文接收方调用,使用流处理来自对等体的令牌。
|
void |
dispose()
释放存储在上下文对象中的任何系统资源和加密信息,并使上下文无效。
|
byte[] |
export()
导出此上下文,以便另一个进程可以导入它。
|
boolean |
getAnonymityState()
确定上下文启动器是否被上下文接受者匿名认证。
|
boolean |
getConfState()
确定数据机密性是否可用于上下文。
|
boolean |
getCredDelegState()
确定在此上下文中是否启用凭据委派。
|
GSSCredential |
getDelegCred()
获取由上下文启动器委派给上下文接收器的凭据。
|
boolean |
getIntegState()
确定数据完整性是否可用于上下文。
|
int |
getLifetime()
确定此上下文的剩余生命周期。
|
Oid |
getMech()
确定在这个上下文中使用什么机制。
|
byte[] |
getMIC(byte[] inMsg, int offset, int len, MessageProp msgProp)
返回包含所提供消息的加密消息完整性代码(MIC)的令牌,以传输到对等应用程序。
|
void |
getMIC(InputStream inStream, OutputStream outStream, MessageProp msgProp)
使用流生成包含所提供消息的密码MIC的令牌,以传输到对等应用程序。
|
boolean |
getMutualAuthState()
确定在此上下文中是否启用了相互验证。
|
boolean |
getReplayDetState()
确定是否从此上下文为每个消息安全服务启用重放检测。
|
boolean |
getSequenceDetState()
确定是否从此上下文为每个消息安全服务启用了序列检查。
|
GSSName |
getSrcName()
返回上下文启动器的名称。
|
GSSName |
getTargName()
返回上下文接收器的名称。
|
int |
getWrapSizeLimit(int qop, boolean confReq, int maxTokenSize)
用于确定可以传递给
wrap 的消息大小的限制。
|
byte[] |
initSecContext(byte[] inputBuf, int offset, int len)
由上下文发起者调用以启动上下文创建阶段,并处理由对等体的
acceptSecContext 方法生成的任何令牌。
|
int |
initSecContext(InputStream inStream, OutputStream outStream)
由上下文发起者调用以启动上下文创建阶段,并处理由对等体的
acceptSecContext 方法使用流生成的任何令牌。
|
boolean |
isEstablished()
在上下文建立期间使用以确定上下文的状态。
|
boolean |
isInitiator()
确定这是否是上下文启动器。
|
boolean |
isProtReady()
确定上下文是否准备好用于每个消息操作。
|
boolean |
isTransferable()
通过使用
export 方法确定上下文是否可转移到其他进程。
|
void |
requestAnonymity(boolean state)
要求发起人的身份不被披露给受理人。
|
void |
requestConf(boolean state)
要求为
wrap 方法启用数据机密性。
|
void |
requestCredDeleg(boolean state)
请求在上下文建立期间将启动器的凭据委托给接受者。
|
void |
requestInteg(boolean state)
要求对
wrap 和
getMIC 方法启用数据完整性。
|
void |
requestLifetime(int lifetime)
为上下文请求一秒钟的生命周期。
|
void |
requestMutualAuth(boolean state)
要求在上下文建立期间进行相互验证。
|
void |
requestReplayDet(boolean state)
在上下文建立之后,请求对每个消息安全服务启用重播检测。
|
void |
requestSequenceDet(boolean state)
请求在上下文建立后为每个消息安全服务启用序列检查。
|
void |
setChannelBinding(ChannelBinding cb)
设置在上下文建立期间要使用的通道绑定。
|
byte[] |
unwrap(byte[] inBuf, int offset, int len, MessageProp msgProp)
用于在上下文的另一边处理由
wrap 方法生成的令牌。
|
void |
unwrap(InputStream inStream, OutputStream outStream, MessageProp msgProp)
在上下文的另一边使用流来处理由
wrap 方法生成的令牌。
|
void |
verifyMIC(byte[] inToken, int tokOffset, int tokLen, byte[] inMsg, int msgOffset, int msgLen, MessageProp msgProp)
通过提供的消息验证令牌参数中包含的密码MIC。
|
void |
verifyMIC(InputStream tokStream, InputStream msgStream, MessageProp msgProp)
通过提供的消息使用流来验证包含在令牌参数中的加密MIC。
|
byte[] |
wrap(byte[] inBuf, int offset, int len, MessageProp msgProp)
在已建立的安全上下文中应用每消息安全服务。
|
void |
wrap(InputStream inStream, OutputStream outStream, MessageProp msgProp)
使用流在已建立的安全上下文中应用每消息安全服务。
|
static final int DEFAULT_LIFETIME
static final int INDEFINITE_LIFETIME
Integer.MAX_VALUE
。
byte[] initSecContext(byte[] inputBuf, int offset, int len) throws GSSException
acceptSecContext
方法生成的任何令牌。
该方法可以返回输出令牌,应用程序将需要通过其acceptSecContext
方法发送给对等体进行处理。
应用程序可以调用isEstablished
来确定上下文的这一方是否完成上下文建立阶段。
的返回值false
从isEstablished
表示多个令牌被预期要被提供给initSecContext
。
完成上下文建立后,可以通过get方法查询可用的上下文选项。
请注意,它有可能是initSecContext
方法返回一个标记为同行和isEstablished
回报true
也。 这表示令牌需要发送给对等体,但是上下文的本地结束现在已经完全建立了。
一些机制提供者可能会要求呼叫者被授予启动安全上下文的权限。 失败的权限检查可能会导致从该方法抛出SecurityException
。
inputBuf
- 对等体inputBuf
令牌。
此参数在第一次调用时被忽略,因为没有从对等体接收到令牌。
offset
- 令牌开始的inputBuf内的偏移量。
len
- 令牌的长度。
null
表示没有生成令牌。
GSSException
-包含以下主要错误代码:
GSSException.DEFECTIVE_TOKEN
,
GSSException.BAD_MIC
,
GSSException.NO_CRED
,
GSSException.CREDENTIALS_EXPIRED
,
GSSException.BAD_BINDINGS
,
GSSException.OLD_TOKEN
,
GSSException.DUPLICATE_TOKEN
,
GSSException.BAD_NAMETYPE
,
GSSException.BAD_MECH
,
GSSException.FAILURE
int initSecContext(InputStream inStream, OutputStream outStream) throws GSSException
acceptSecContext
方法使用流生成的任何令牌。
该方法可以将输出令牌写入OutpuStream
,应用程序将需要通过其acceptSecContext
调用发送给对等体进行处理。
通常,应用程序将通过调用确保此flush
上的方法OutputStream
封装了两个对等体之间的连接。
应用程序可以确定令牌是否从此方法的返回值写入OutputStream。
返回值为0
表示没有令牌写入。
应用程序可以调用isEstablished
来确定上下文的这一方是否完成上下文建立阶段。
的返回值false
从isEstablished
表示多个令牌被预期要被提供给initSecContext
。
完成上下文建立后,可以通过get方法查询可用的上下文选项。
请注意,它有可能是initSecContext
方法返回一个标记为同行和isEstablished
回报true
也。 这表示令牌需要发送给对等体,但是上下文的本地结束现在已经完全建立了。
GSS-API认证令牌包含一个确定的开始和结束。 该方法将尝试每次调用读取其中一个令牌,如果只有部分令牌可用,则可能会阻塞该流。 在所有其他方面,此方法相当于基于initSecContext
的字节数组。
一些机制提供者可能会要求呼叫者被授予启动安全上下文的权限。 失败的权限检查可能会导致从此方法抛出SecurityException
。
以下示例代码演示了如何使用此方法:
InputStream is ...
OutputStream os ...
GSSContext context ...
// Loop while there is still a token to be processed
while (!context.isEstablished()) {
context.initSecContext(is, os);
// send output token if generated
os.flush();
}
inStream
- 包含对等体生成的令牌的InputStream。
此参数在第一次调用时被忽略,因为在该点没有或将从对等体接收到令牌。
outStream
- 输出令牌将被写入的OutputStream。
在上下文建立的最后阶段,可能不会写入字节。
GSSException
-包含以下主要错误代码:
GSSException.DEFECTIVE_TOKEN
,
GSSException.BAD_MIC
,
GSSException.NO_CRED
,
GSSException.CREDENTIALS_EXPIRED
,
GSSException.BAD_BINDINGS
,
GSSException.OLD_TOKEN
,
GSSException.DUPLICATE_TOKEN
,
GSSException.BAD_NAMETYPE
,
GSSException.BAD_MECH
,
GSSException.FAILURE
byte[] acceptSecContext(byte[] inToken, int offset, int len) throws GSSException
initSecContext
调用。
应用程序可以调用isEstablished
来确定该对等体的上下文建立阶段是否完成。 的返回值false
从isEstablished
表示多个令牌被预期将要提供给该方法。 完成上下文建立后,可以通过get方法查询可用的上下文选项。
请注意,有可能是acceptSecContext
返回一个标记为同行和isEstablished
回报true
也。 这表示令牌需要发送给对等体,但是上下文的本地结束现在已经完全建立了。
一些机制提供者可能要求呼叫者被授予接受安全上下文的权限。 失败的权限检查可能会导致从此方法抛出SecurityException
。
以下示例代码演示了如何使用此方法:
byte[] inToken;
byte[] outToken;
GSSContext context ...
// Loop while there is still a token to be processed
while (!context.isEstablished()) {
inToken = readToken();
outToken = context.acceptSecContext(inToken, 0,
inToken.length);
// send output token if generated
if (outToken != null)
sendToken(outToken);
}
inToken
- 对等体
inToken
令牌。
offset
- 令牌开始的inToken内的偏移量。
len
- 令牌的长度。
null
表示没有生成令牌。
GSSException
-包含以下主要错误代码:
GSSException.DEFECTIVE_TOKEN
,
GSSException.BAD_MIC
,
GSSException.NO_CRED
,
GSSException.CREDENTIALS_EXPIRED
,
GSSException.BAD_BINDINGS
,
GSSException.OLD_TOKEN
,
GSSException.DUPLICATE_TOKEN
,
GSSException.BAD_MECH
,
GSSException.FAILURE
void acceptSecContext(InputStream inStream, OutputStream outStream) throws GSSException
OutputStream
写一个输出令牌,应用程序将需要通过其initSecContext
方法发送给对等体进行处理。
通常,应用程序将通过调用确保此flush
上的方法OutputStream
封装了两个对等体之间的连接。
应用程序可以调用isEstablished
来确定上下文的这一方是否完成上下文建立阶段。
的返回值false
从isEstablished
表示多个令牌被预期要被提供给acceptSecContext
。
完成上下文建立后,可以通过get方法查询可用的上下文选项。
请注意,有可能是acceptSecContext
返回一个标记为同行和isEstablished
回报true
也。 这表示令牌需要发送给对等体,但是上下文的本地结束现在已经完全建立了。
GSS-API认证令牌包含一个确定的开始和结束。 该方法将尝试每次调用读取其中一个令牌,如果只有部分令牌可用,则可能会阻塞该流。 在所有其他方面,此方法相当于基于acceptSecContext
的字节数组。
一些机制提供者可能要求呼叫者被授予接受安全上下文的权限。 失败的权限检查可能会导致从此方法抛出SecurityException
。
以下示例代码演示了如何使用此方法:
InputStream is ...
OutputStream os ...
GSSContext context ...
// Loop while there is still a token to be processed
while (!context.isEstablished()) {
context.acceptSecContext(is, os);
// send output token if generated
os.flush();
}
inStream
- 包含对等体生成的令牌的InputStream。
outStream
- 输出令牌将被写入的OutputStream。
在上下文建立的最后阶段,可能不会写入字节。
GSSException
-包含以下主要错误代码:
GSSException.DEFECTIVE_TOKEN
,
GSSException.BAD_MIC
,
GSSException.NO_CRED
,
GSSException.CREDENTIALS_EXPIRED
,
GSSException.BAD_BINDINGS
,
GSSException.OLD_TOKEN
,
GSSException.DUPLICATE_TOKEN
,
GSSException.BAD_MECH
,
GSSException.FAILURE
boolean isEstablished()
true
如果这是来自呼叫方的完全建立的上下文,并且不需要来自对等体的更多令牌。
void dispose() throws GSSException
GSSException
- 包含以下主要错误代码:
GSSException.FAILURE
int getWrapSizeLimit(int qop, boolean confReq, int maxTokenSize) throws GSSException
wrap
的消息大小的限制。
返回最大消息大小,如果提供给具有相同confReq
和qop
参数的wrap
方法,则会导致输出令牌不超过maxTokenSize
字节。
此呼叫旨在供通过施加最大消息大小的协议进行通信的应用程序使用。 它使应用程序在应用保护之前对消息进行分段。
GSS-API实现的建议,但在不需要时检测无效QOP值getWrapSizeLimit
被调用。 此例程仅保留最大消息大小,而不保证消息保护的特定QOP值的可用性。
qop
- 将要求提供防护等级。
confReq
-
true
如果将要求提供隐私,
false
否则。
maxTokenSize
- 由wrap发出的令牌所需的最大大小。
GSSException
-包含以下主要错误代码:
GSSException.CONTEXT_EXPIRED
,
GSSException.BAD_QOP
,
GSSException.FAILURE
byte[] wrap(byte[] inBuf, int offset, int len, MessageProp msgProp) throws GSSException
MessageProp对象由应用程序实例化,用于指定选择加密算法的QOP值,以及可选地加密消息的隐私服务。 呼叫中使用的基础机制可能无法提供隐私服务。 它设置它在此MessageProp对象中提供的实际隐私服务,呼叫者在返回时应该查询。 如果机制无法提供所请求的QOP,则它会抛出一个具有BAD_QOP代码的GSSException。
由于一些应用程序级协议可能希望使用由wrap发出的令牌以提供“安全成帧”,所以实现应该支持对零长度消息的包装。
应用程序将负责将令牌发送给对等体。
inBuf
- 要保护的应用程序数据。
offset
- 数据开始的inBuf中的偏移量。
len
- 数据的长度
msgProp
- 应用程序用于设置所需QOP和隐私状态的MessageProp实例。
将所需的QOP设置为0以请求默认的QOP。
从此方法返回后,此对象将包含底层机制应用于消息的实际隐私状态。
GSSException
-包含以下主要错误代码:
GSSException.CONTEXT_EXPIRED
,
GSSException.BAD_QOP
,
GSSException.FAILURE
void wrap(InputStream inStream, OutputStream outStream, MessageProp msgProp) throws GSSException
wrap
的字节数组。
应用程序将负责将令牌发送给对等体。 通常,应用程序将通过调用确保此flush
上的方法OutputStream
封装了两个对等体之间的连接。
MessageProp对象由应用程序实例化,用于指定选择加密算法的QOP值,以及可选地加密消息的隐私服务。 呼叫中使用的基础机制可能无法提供隐私服务。 它设置它在此MessageProp对象中提供的实际隐私服务,呼叫者在返回时应该查询。 如果机制无法提供所请求的QOP,则它会抛出一个具有BAD_QOP代码的GSSException。
由于一些应用程序级协议可能希望使用由wrap发出的令牌以提供“安全成帧”,所以实现应该支持对零长度消息的包装。
inStream
- 包含要保护的应用程序数据的InputStream。
使用inStream中可用的所有数据。
outStream
- 将受保护的消息写入的OutputStream。
msgProp
- 应用程序用于设置所需QOP和隐私状态的MessageProp实例。
将所需的QOP设置为0以请求默认的QOP。
从此方法返回后,此对象将包含底层机制应用于消息的实际隐私状态。
GSSException
-包含以下主要错误代码:
GSSException.CONTEXT_EXPIRED
,
GSSException.BAD_QOP
,
GSSException.FAILURE
byte[] unwrap(byte[] inBuf, int offset, int len, MessageProp msgProp) throws GSSException
wrap
方法生成的令牌。
该方法将将对等应用程序提供的消息返回到其包裹调用,同时验证该消息的嵌入式MIC。
MessageProp对象由应用程序实例化,并被底层机制用于将信息返回给呼叫者,例如QOP,是否将机密性应用于消息,以及其他补充消息状态信息。
由于一些应用级协议可能希望使用由wrap发出的令牌来提供“安全的成帧”,所以实现应该支持零长度消息的包装和解包。
inBuf
- 一个包含从对等体接收到的换行标记的字节数组。
offset
- 令牌开始的偏移量。
len
- 令牌的长度
msgProp
- 从方法返回后,该对象将包含应用的QOP,消息的隐私状态和补充信息,说明令牌是否是重复的,旧的,不顺序的或在间隙之后到达。
GSSException
-包含以下主要错误代码:
GSSException.DEFECTIVE_TOKEN
,
GSSException.BAD_MIC
,
GSSException.CONTEXT_EXPIRED
,
GSSException.FAILURE
void unwrap(InputStream inStream, OutputStream outStream, MessageProp msgProp) throws GSSException
wrap
方法生成的令牌。
该方法将将对等应用程序提供的消息返回到其包裹调用,同时验证该消息的嵌入式MIC。
MessageProp对象由应用程序实例化,并被底层机制用于将信息返回给呼叫者,例如QOP,是否将机密性应用于消息,以及其他补充消息状态信息。
由于一些应用级协议可能希望使用由wrap发出的令牌来提供“安全的成帧”,所以实现应该支持零长度消息的包装和解包。
该方法读取的输入令牌的格式在规范中定义为将要使用的底层机制。 此方法将尝试每次调用读取其中一个令牌。 如果机制令牌包含一个确定的开始和结束,那么只有部分令牌InputStream
,此方法可能会阻塞InputStream。 如果令牌的开始和结束不是确定的,那么该方法将尝试将所有可用字节视为令牌的一部分。
除了上述可能的阻塞行为之外,该方法相当于基于unwrap
的字节数组方法。
inStream
- 包含对等体生成的换行令牌的InputStream。
outStream
- 将应用程序消息写入的OutputStream。
msgProp
- 从方法返回时,该对象将包含所应用的QOP,消息的隐私状态和补充信息,说明令牌是否是重复的,旧的,不顺序的或在间隙之后到达的。
GSSException
-包含以下主要错误代码:
GSSException.DEFECTIVE_TOKEN
,
GSSException.BAD_MIC
,
GSSException.CONTEXT_EXPIRED
,
GSSException.FAILURE
byte[] getMIC(byte[] inMsg, int offset, int len, MessageProp msgProp) throws GSSException
请注意,只能通过换行呼叫来应用隐私。
由于一些应用级协议可能希望使用由getMIC发出的令牌提供“安全成帧”,所以实现应该支持从零长度消息中导出MIC。
inMsg
- 生成MIC的消息。
offset
- 消息开始的inMsg内的偏移量。
len
- 消息的长度
msgProp
-的实例MessageProp
所使用的应用程序来设置所需QOP。
设置需要的QOP到0
在msgProp
来请求默认QOP。
或者通过null
为msgProp
请求默认的QOP。
GSSException
-包含以下主要错误代码:
GSSException.CONTEXT_EXPIRED
,
GSSException.BAD_QOP
,
GSSException.FAILURE
void getMIC(InputStream inStream, OutputStream outStream, MessageProp msgProp) throws GSSException
getMIC
的字节数组。
请注意,只能通过换行呼叫来应用隐私。
由于一些应用级协议可能希望使用由getMIC发出的令牌提供“安全成帧”,所以实现应该支持从零长度消息中导出MIC。
inStream
- 一个包含生成MIC的消息的InputStream。
使用inStream中可用的所有数据。
outStream
- 将输出令牌写入的OutputStream。
msgProp
-的实例MessageProp
所使用的应用程序来设置所需QOP。
设置需要的QOP到0
在msgProp
来请求默认QOP。
或者通过null
寻找msgProp
以请求默认的QOP。
GSSException
-包含以下主要错误代码:
GSSException.CONTEXT_EXPIRED
,
GSSException.BAD_QOP
,
GSSException.FAILURE
void verifyMIC(byte[] inToken, int tokOffset, int tokLen, byte[] inMsg, int msgOffset, int msgLen, MessageProp msgProp) throws GSSException
MessageProp对象由应用程序实例化,并被底层机制用于向呼叫者返回信息,例如指示应用于消息的保护强度的QOP和其他补充消息状态信息。
由于一些应用级协议可能希望使用由getMIC发出的令牌提供“安全成帧”,所以实现应该支持对零长度消息的MIC的计算和验证。
inToken
- 由对等体的getMIC方法
inToken
的令牌。
tokOffset
- 令牌开始的inToken内的偏移量。
tokLen
- 令牌的长度。
inMsg
- 验证密码MIC的应用程序消息。
msgOffset
- 消息开始的inMsg中的偏移量。
msgLen
- 消息的长度。
msgProp
- 从方法返回后,该对象将包含应用的QOP和补充信息,说明令牌是否是重复的,旧的,不顺序的或在间隙之后到达。
GSSException
- 包含以下主要错误代码:
GSSException.DEFECTIVE_TOKEN
GSSException.BAD_MIC
GSSException.CONTEXT_EXPIRED
GSSException.FAILURE
void verifyMIC(InputStream tokStream, InputStream msgStream, MessageProp msgProp) throws GSSException
verifyMIC
的字节数组方法。
MessageProp对象由应用程序实例化,并被底层机制用于向呼叫者返回信息,例如指示应用于消息的保护强度的QOP和其他补充消息状态信息。
由于一些应用级协议可能希望使用由getMIC发出的令牌提供“安全成帧”,所以实现应该支持对零长度消息的MIC的计算和验证。
该方法读取的输入令牌的格式在规范中定义为将要使用的底层机制。 此方法将尝试每次调用读取其中一个令牌。 如果机制令牌包含一个确定的开始和结束,则此方法可能会阻塞InputStream
如果只有部分令牌可用。 如果令牌的开始和结束不是确定的,那么该方法将尝试将所有可用字节视为令牌的一部分。
除了上述可能的阻塞行为之外,该方法相当于基于verifyMIC
的字节数组方法。
tokStream
- 包含对等体的getMIC方法生成的令牌的InputStream。
msgStream
- 包含应用程序消息以验证密码MIC的InputStream。
使用所有在msgStream中可用的数据。
msgProp
- 从方法返回后,该对象将包含应用的QOP和补充信息,说明令牌是否是重复的,旧的,不顺序的或在间隙之后到达。
GSSException
- 包含以下主要错误代码:
GSSException.DEFECTIVE_TOKEN
GSSException.BAD_MIC
GSSException.CONTEXT_EXPIRED
GSSException.FAILURE
byte[] export() throws GSSException
该方法取消激活安全上下文并创建进程间令牌,当在另一进程中传递给GSSManager.createContext
时,将重新激活第二个进程中的上下文。 任何一个时间只能对一个给定的上下文进行一次实例化; 上下文导出器随后尝试访问导出的安全性上下文将失败。
该实现可以限制可以导入进程间令牌的进程集合,或者作为本地安全策略的函数,或者作为实现决定的结果。 例如,一些实现可能会限制仅在同一帐户下运行的进程之间传递的上下文,或者是相同进程组的一部分的上下文。
进程间令牌可能包含安全敏感信息(例如加密密钥)。 虽然鼓励机制避免将这些敏感信息放置在进程间令牌中,或者在将代码返回应用程序之前加密令牌,但在典型的GSS-API实现中,这可能是不可能的。 因此,应用程序必须注意保护进程间令牌,并确保令牌传输到的任何进程是值得信赖的。
实施不需要支持安全上下文的进程间传输。 调用isTransferable
方法将指示上下文对象是否可转移。
在不可导出的上下文中调用此方法将导致异常抛出错误代码GSSException.UNAVAILABLE
。
GSSException
-包含以下主要错误代码:
GSSException.UNAVAILABLE
,
GSSException.CONTEXT_EXPIRED
,
GSSException.NO_CONTEXT
,
GSSException.FAILURE
GSSManager.createContext(byte[])
void requestMutualAuth(boolean state) throws GSSException
initSecContext
之前完成。
并不是所有的机制都支持相互认证,一些机制也可能需要相互认证,即使应用没有。 因此,应用程序应检查该请求是否符合getMutualAuthState
方法。
state
- 表示是否应使用相互认证的布尔值。
GSSException
- 包含以下主要错误代码:
GSSException.FAILURE
getMutualAuthState()
void requestReplayDet(boolean state) throws GSSException
initSecContext
之前完成。
在上下文建立期间,重放检测不是一个选项,而是底层机制的功能。
并不是所有的机制都支持重放检测,一些机制可能需要重放检测,即使应用程序没有。 因此,应用程序应检查该请求是否符合getReplayDetState
方法。 如果启用重放检测,那么MessageProp.isDuplicateToken
和MessageProp.isOldToken
方法将返回传递给unwrap
方法或verifyMIC
方法的MessageProp
对象的有效结果。
state
- 一个布尔值,指示是否应在已建立的上下文中启用重放检测。
GSSException
- 包含以下主要错误代码:
GSSException.FAILURE
getReplayDetState()
void requestSequenceDet(boolean state) throws GSSException
initSecContext
之前完成。
在上下文建立过程中,序列检查不是一个选项,而是底层机制的功能。
并不是所有的机制都支持序列检查,一些机制可能需要序列检查,即使应用程序没有。 因此,应用程序应检查该请求是否符合getSequenceDetState
方法。 如果序列检查已启用,则MessageProp.isDuplicateToken
, MessageProp.isOldToken
, MessageProp.isUnseqToken
和MessageProp.isGapToken
方法将返回有效的结果MessageProp
即到传递的对象unwrap
方法或verifyMIC
方法。
state
- 一个布尔值,指示是否应在建立的上下文中启用序列检查。
GSSException
- 包含以下主要错误代码:
GSSException.FAILURE
getSequenceDetState()
void requestCredDeleg(boolean state) throws GSSException
initSecContext
之前完成。
并非所有机制都支持凭据授权。
因此,希望代表团的申请应检查该请求是否符合getCredDelegState
方法。
如果申请表明不能使用授权,那么该机制将履行该请求,不会发生授权。
这是一个一般规则的例外,即一种机制即使没有请求也可以启用服务。
state
- 一个布尔值,指示是否应委托凭据。
GSSException
- 包含以下主要错误代码:
GSSException.FAILURE
getCredDelegState()
void requestAnonymity(boolean state) throws GSSException
initSecContext
之前完成。
并非所有机制都支持发起者匿名。
因此,应用程序应检查该请求是否符合getAnonymityState
方法。
state
- 一个布尔值,指示启动器是否应作为匿名主体验证到接受者。
GSSException
- 包含以下主要错误代码:
GSSException.FAILURE
getAnonymityState()
void requestConf(boolean state) throws GSSException
wrap
方法启用数据机密性。
该请求只能在上下文发起者的一方进行,并且必须在首次调用initSecContext
之前完成。
并不是所有的机制都支持机密性,而其他机制也可能使应用程序不要求它。
应用程序可以检查该请求是否符合getConfState
方法。
如果启用机密性,那么只有这样机制才能尊重wrap
方法中传递的MessageProp
对象中的隐私请求。
启用机密性也将自动启用完整性。
state
- 一个布尔值,指示是否应启用机密性。
GSSException
- 包含以下主要错误代码:
GSSException.FAILURE
getConfState()
, getIntegState()
, requestInteg(boolean)
, MessageProp
void requestInteg(boolean state) throws GSSException
wrap
和getMIC
方法启用数据完整性。
该请求只能在上下文发起方的一方进行,并且必须在首次调用initSecContext
之前完成。
并不是所有的机制都支持完整性,而其他机制也可能使它能够使用,即使应用程序没有请求它。
应用程序可以检查该请求是否符合getIntegState
方法。
禁用完整性也会自动禁用机密性。
state
- 一个布尔值,表示是否应启用完整性。
GSSException
- 包含以下主要错误代码:
GSSException.FAILURE
getIntegState()
void requestLifetime(int lifetime) throws GSSException
initSecContext
之前进行。
上下文的实际生命周期取决于底层机制的能力,应用程序应该调用getLifetime
方法来确定这一点。
lifetime
- 所需的上下文生命周期(以秒为单位)。
使用INDEFINITE_LIFETIME
请求无限期的生命周期和DEFAULT_LIFETIME
请求默认生命周期。
GSSException
- 包含以下主要错误代码:
GSSException.FAILURE
getLifetime()
void setChannelBinding(ChannelBinding cb) throws GSSException
initSecContext
之前调用它,并且接受方必须在首次调用acceptSecContext
之前调用它。
cb
- 要使用的通道绑定。
GSSException
- 包含以下主要错误代码:
GSSException.FAILURE
boolean getCredDelegState()
requestCredDeleg
方法将履行该请求,并且此方法将从该点起返回false
方的false。
requestCredDeleg(boolean)
boolean getMutualAuthState()
requestMutualAuth(boolean)
boolean getReplayDetState()
requestReplayDet(boolean)
boolean getSequenceDetState()
requestSequenceDet(boolean)
boolean getAnonymityState()
initSecContext
。
绝对必须匿名认证的发起方应在每次调用initSecContext
后调用此方法,以确定生成的令牌是否应发送到对等体或上下文中止。
在接受方,调用此方法确定由acceptSecContext
任何令牌到目前为止已经泄露了启动器的身份。
requestAnonymity(boolean)
boolean isTransferable() throws GSSException
export
方法确定上下文是否可转移到其他进程。
此呼叫仅在完全建立的上下文中有效。
GSSException
- 包含以下主要错误代码:
GSSException.FAILURE
boolean isProtReady()
wrap
,
unwrap
,
getMIC
和
verifyMIC
可以用此背景下,在上下文创建的当前阶段使用,否则为false。
boolean getConfState()
isProtReady
或isEstablished
之一返回true
。
如果这个方法返回true
,那么也就getIntegState
requestConf(boolean)
boolean getIntegState()
isProtReady
或isEstablished
之一返回true
。
如果getConfState
返回true,此方法将始终返回true
。
requestInteg(boolean)
int getLifetime()
isEstablished
返回true之后才应该调用它。
requestLifetime(int)
GSSName getSrcName() throws GSSException
isProtReady
或isEstablished
之一返回true
之后有效。
GSSException
- 包含以下主要错误代码:
GSSException.FAILURE
GSSName
GSSName getTargName() throws GSSException
isProtReady
或isEstablished
之一返回true
之后才有效。
GSSException
- 包含以下主要错误代码:
GSSException.FAILURE
Oid getMech() throws GSSException
GSSException
- 包含以下主要错误代码:
GSSException.FAILURE
GSSCredential getDelegCred() throws GSSException
null
没有委派凭据。
GSSException
- 包含以下主要错误代码:
GSSException.FAILURE
boolean isInitiator() throws GSSException
GSSException
- 包含以下主要错误代码:
GSSException.FAILURE