-
- All Known Subinterfaces:
-
ExtendedGSSContext
public interface GSSContext
该接口封装了GSS-API安全上下文,并提供了可用于上下文的安全服务。 使用本地获取的证书在对等体之间建立安全上下文。 多个上下文可以同时存在于一对对等体之间,使用相同或不同的凭证集合。 GSS-API以独立于底层传输协议的方式运行,并且取决于其调用应用程序来传输由对等体之间的安全上下文生成的令牌。如果调用者使用默认的
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();
- 从以下版本开始:
- 1.4
-
-
Field Summary
Fields Modifier and Type Field 描述 static int
DEFAULT_LIFETIME
表示默认上下文生存期的生命周期常数。static int
INDEFINITE_LIFETIME
一个代表不确定上下文生命周期的生命周期。
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 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
对等体的acceptSecContext
方法生成的任何令牌。int
initSecContext(InputStream inStream, OutputStream outStream)
由上下文发起者调用以启动上下文创建阶段,acceptSecContext
对等体的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)
使用流在已建立的安全上下文中应用每消息安全服务。
-
-
-
字段详细信息
-
DEFAULT_LIFETIME
static final int DEFAULT_LIFETIME
表示默认上下文生存期的生命周期常数。 该值设置为0。- 另请参见:
- Constant Field Values
-
INDEFINITE_LIFETIME
static final int INDEFINITE_LIFETIME
一个代表不确定上下文生命周期的生命周期。 该值必须设置为Java中的最大整数值 -Integer.MAX_VALUE
。- 另请参见:
- Constant Field Values
-
-
方法详细信息
-
initSecContext
byte[] initSecContext(byte[] inputBuf, int offset, int len) throws GSSException
由上下文发起者调用以启动上下文创建阶段acceptSecContext
对等体的acceptSecContext
方法生成的任何令牌。 该方法可以返回应用程序需要发送给对等体的输出令牌,以通过其acceptSecContext
方法进行处理。 应用程序可以调用isEstablished
来确定上下文的这一方是否完成上下文建立阶段。 来自isEstablished
返回值为false
,表示有望向initSecContext
提供更多令牌。 完成上下文建立后,可以通过get方法查询可用的上下文选项。请注意,它有可能是
initSecContext
方法返回一个标记为同行和isEstablished
回报true
也。 这表示令牌需要发送给对等体,但是上下文的本地结束现在已经完全建立了。一些机制提供者可能会要求呼叫者被授予启动安全上下文的权限。 失败的权限检查可能会导致从该方法抛出
SecurityException
。- 参数
-
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
-
initSecContext
int initSecContext(InputStream inStream, OutputStream outStream) throws GSSException
由上下文发起者调用以启动上下文创建阶段,并使用流处理由对等体的acceptSecContext
方法生成的任何令牌。 该方法可以将输出令牌写入OutpuStream
,应用程序将需要通过其acceptSecContext
调用发送给对等体进行处理。 通常,应用程序将通过调用确保此flush
上的方法OutputStream
封装了两个对等体之间的连接。 应用程序可以确定令牌是否从此方法的返回值写入OutputStream。 返回值为0
表示没有写入令牌。 应用程序可以调用isEstablished
来确定上下文建立阶段是否在上下文的这一侧完成。 来自isEstablished
返回值为false
,表示有望向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。 在上下文建立的最后阶段,可能不会写入字节。 - 结果
- 作为要发送到对等体的令牌的一部分写入OutputStream的字节数。 值为0表示不需要发送令牌。
- 异常
-
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
-
acceptSecContext
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
- 由对等体生成的令牌。 -
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
-
acceptSecContext
void acceptSecContext(InputStream inStream, OutputStream outStream) throws GSSException
由上下文接收方调用,使用流处理来自对等体的令牌。 它可以向OutputStream
写入输出令牌,应用程序将需要通过其initSecContext
方法发送到对等体进行处理。 通常,应用程序将通过调用确保此flush
上的方法OutputStream
封装了两个对等体之间的连接。 该应用程序可以调用isEstablished
来确定上下文建立阶段是否在上下文的这一侧完成。 来自isEstablished
返回值为false
,表示有望向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
-
isEstablished
boolean isEstablished()
在上下文建立期间使用以确定上下文的状态。- 结果
-
true
如果这是一个完全建立的上下文在呼叫者的一方,不需要从对等体更多的令牌。
-
dispose
void dispose() throws GSSException
释放存储在上下文对象中的任何系统资源和加密信息,并使上下文无效。- 异常
-
GSSException
- 包含以下主要错误代码:GSSException.FAILURE
-
getWrapSizeLimit
int getWrapSizeLimit(int qop, boolean confReq, int maxTokenSize) throws GSSException
用于确定可传递给wrap
的消息大小的限制。 返回最大消息大小,如果提交给具有相同confReq
和qop
参数的wrap
方法,则会导致输出令牌不超过maxTokenSize
字节。此呼叫旨在供通过施加最大消息大小的协议进行通信的应用程序使用。 它使应用程序在应用保护之前对消息进行分段。
推荐使用GSS-API实现,但在
getWrapSizeLimit
时检测无效的QOP值不是必需的。 此例程仅保留最大消息大小,而不保证消息保护的特定QOP值的可用性。- 参数
-
qop
- 将要求提供防护等级。 -
confReq
-true
如果要求提供隐私提供隐私,false
否则。 -
maxTokenSize
- 由wrap发出的令牌的期望最大大小。 - 结果
- 给定输出令牌大小的输入令牌的最大大小
- 异常
-
GSSException
-包含以下主要错误代码:GSSException.CONTEXT_EXPIRED
,GSSException.BAD_QOP
,GSSException.FAILURE
-
wrap
byte[] wrap(byte[] inBuf, int offset, int len, MessageProp msgProp) throws GSSException
在已建立的安全上下文中应用每消息安全服务。 该方法将使用应用程序提供的数据和密码MIC返回一个令牌。 如果要求保密(隐私),则数据可能会被加密。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
-
wrap
void wrap(InputStream inStream, OutputStream outStream, MessageProp msgProp) throws GSSException
使用流在已建立的安全上下文中应用每消息安全服务。 该方法将使用应用程序提供的数据和密码MIC返回一个令牌。 如果要求保密(隐私),则数据可能会被加密。 这种方法相当于基于字节数组的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
-
unwrap
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
-
unwrap
void unwrap(InputStream inStream, OutputStream outStream, MessageProp msgProp) throws GSSException
在上下文的另一边使用流处理由wrap
方法生成的令牌。 该方法将将对等应用程序提供的消息返回到其包裹调用,同时验证该消息的嵌入式MIC。MessageProp对象由应用程序实例化,并被底层机制用于将信息返回给呼叫者,例如QOP,是否将机密性应用于消息,以及其他补充消息状态信息。
由于一些应用级协议可能希望使用由wrap发出的令牌来提供“安全的成帧”,所以实现应该支持零长度消息的包装和解包。
该方法读取的输入令牌的格式在规范中定义为将要使用的底层机制。 此方法将尝试每次调用读取其中一个令牌。 如果机制令牌包含确定的开始和结束,则只有部分令牌可用,此方法可能会阻止
InputStream
。 如果令牌的开始和结束不是确定的,那么该方法将尝试将所有可用字节视为令牌的一部分。除了上述可能的阻塞行为之外,该方法相当于基于字节数组的
unwrap
方法。- 参数
-
inStream
- 包含对等体生成的换行令牌的InputStream。 -
outStream
- 将应用程序消息写入的OutputStream。 -
msgProp
- 从方法返回时,该对象将包含所应用的QOP,消息的隐私状态和补充信息,说明令牌是否是重复的,旧的,不顺序的或在间隙之后到达的。 - 异常
-
GSSException
-包含以下主要错误代码:GSSException.DEFECTIVE_TOKEN
,GSSException.BAD_MIC
,GSSException.CONTEXT_EXPIRED
,GSSException.FAILURE
-
getMIC
byte[] getMIC(byte[] inMsg, int offset, int len, MessageProp msgProp) throws GSSException
返回包含所提供消息的加密消息完整性代码(MIC)的令牌,以传输到对等应用程序。 不同于wrap,它将用户消息封装在返回的令牌中,只有在输出令牌中返回消息MIC。请注意,只能通过换行呼叫来应用隐私。
由于一些应用级协议可能希望使用由getMIC发出的令牌提供“安全成帧”,所以实现应该支持从零长度消息中导出MIC。
- 参数
-
inMsg
- 生成MIC的消息。 -
offset
- 消息开始的inMsg内的偏移量。 -
len
- 消息的长度 -
msgProp
- 由应用程序用于设置所需QOP的MessageProp
的实例。 将所需的QOP设置为0
(msgProp
以请求默认的QOP。 或者通过null
formsgProp
以请求默认的QOP。 - 结果
- 包含要发送到对等体的令牌的字节[]。
- 异常
-
GSSException
-包含以下主要错误代码:GSSException.CONTEXT_EXPIRED
,GSSException.BAD_QOP
,GSSException.FAILURE
-
getMIC
void getMIC(InputStream inStream, OutputStream outStream, MessageProp msgProp) throws GSSException
使用流来生成包含所提供消息的加密MIC的令牌,以传送到对等应用程序。 不同于wrap,它将用户消息封装在返回的令牌中,只有在输出令牌中生成消息MIC。 这种方法相当于基于字节数组的getMIC
方法。 请注意,只能通过换行呼叫来应用隐私。由于一些应用级协议可能希望使用由getMIC发出的令牌提供“安全成帧”,所以实现应该支持从零长度消息中导出MIC。
- 参数
-
inStream
- 一个包含生成MIC的消息的InputStream。 使用inStream中可用的所有数据。 -
outStream
- 将输出令牌写入的OutputStream。 -
msgProp
- 由应用程序用于设置所需QOP的MessageProp
的实例。 设置需要的QOP到0
在msgProp
来请求默认QOP。 或者通过null
查询msgProp
以请求默认的QOP。 - 异常
-
GSSException
-包含以下主要错误代码:GSSException.CONTEXT_EXPIRED
,GSSException.BAD_QOP
,GSSException.FAILURE
-
verifyMIC
void verifyMIC(byte[] inToken, int tokOffset, int tokLen, byte[] inMsg, int msgOffset, int msgLen, MessageProp msgProp) throws GSSException
通过提供的消息验证令牌参数中包含的密码MIC。MessageProp对象由应用程序实例化,并被底层机制用于向呼叫者返回信息,例如指示应用于消息的保护强度的QOP和其他补充消息状态信息。
由于一些应用级协议可能希望使用由getMIC发出的令牌提供“安全成帧”,所以实现应该支持对零长度消息的MIC的计算和验证。
- 参数
-
inToken
- 由对等体的getMIC方法生成的令牌。 -
tokOffset
- 令牌开始的inToken内的偏移量。 -
tokLen
- 令牌的长度。 -
inMsg
- 用于验证密码MIC的应用程序消息。 -
msgOffset
- 消息开始的inMsg中的偏移量。 -
msgLen
- 消息的长度。 -
msgProp
- 从方法返回时,该对象将包含应用的QOP和补充信息,说明令牌是否是重复的,旧的,不顺序的或在间隙之后到达。 - 异常
-
GSSException
- 包含以下主要错误代码:GSSException.DEFECTIVE_TOKEN
GSSException.BAD_MIC
GSSException.CONTEXT_EXPIRED
GSSException.FAILURE
-
verifyMIC
void verifyMIC(InputStream tokStream, InputStream msgStream, MessageProp msgProp) throws GSSException
通过提供的消息使用流来验证包含在令牌参数中的加密MIC。 这种方法相当于基于字节数组的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
-
export
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[])
-
requestMutualAuth
void requestMutualAuth(boolean state) throws GSSException
要求在上下文建立期间进行相互验证。 该请求只能在上下文发起方进行,并且必须在首次调用initSecContext
之前完成。并不是所有的机制都支持相互认证,一些机制也可能需要相互认证,即使应用没有。 因此,应用程序应检查该请求是否符合
getMutualAuthState
方法。- 参数
-
state
- 一个布尔值,指示是否应该使用相互验证。 - 异常
-
GSSException
- 包含以下主要错误代码:GSSException.FAILURE
- 另请参见:
-
getMutualAuthState()
-
requestReplayDet
void requestReplayDet(boolean state) throws GSSException
在上下文建立之后,请求对每个消息安全服务启用重播检测。 该请求只能在上下文发起方进行,并且必须在首次调用initSecContext
之前完成。 在上下文建立期间,重放检测不是一个选项,而是底层机制的功能。并不是所有的机制都支持重放检测,一些机制可能需要重放检测,即使应用程序没有。 因此,应用程序应检查请求是否符合
getReplayDetState
方法。 如果启用了重播检测,那么MessageProp.isDuplicateToken
和MessageProp.isOldToken
方法将返回传递给unwrap
方法或verifyMIC
方法的MessageProp
对象的有效结果。- 参数
-
state
- 一个布尔值,指示是否应在已建立的上下文中启用重放检测。 - 异常
-
GSSException
- 包含以下主要错误代码:GSSException.FAILURE
- 另请参见:
-
getReplayDetState()
-
requestSequenceDet
void requestSequenceDet(boolean state) throws GSSException
请求在上下文建立后为每个消息安全服务启用序列检查。 该请求只能在上下文发起方进行,并且必须在首次调用initSecContext
之前完成。 在上下文建立过程中,序列检查不是一个选项,而是底层机制的功能。并不是所有的机制都支持序列检查,一些机制可能需要序列检查,即使应用程序没有。 因此,应用程序应检查该请求是否符合
getSequenceDetState
方法。 如果序列检查已启用,则MessageProp.isDuplicateToken
,MessageProp.isOldToken
,MessageProp.isUnseqToken
,并MessageProp.isGapToken
方法将返回有效的结果MessageProp
即到传递的对象unwrap
方法或verifyMIC
方法。- 参数
-
state
- 一个布尔值,指示是否应在已建立的上下文中启用序列检查。 - 异常
-
GSSException
- 包含以下主要错误代码:GSSException.FAILURE
- 另请参见:
-
getSequenceDetState()
-
requestCredDeleg
void requestCredDeleg(boolean state) throws GSSException
请求在上下文建立期间将启动器的凭据委托给接受者。 该请求只能在上下文发起方进行,并且必须在首次调用initSecContext
之前完成。 并非所有机制都支持凭据授权。 因此,希望授权的应用程序应检查该请求是否符合getCredDelegState
方法。 如果申请表明不能使用授权,那么该机制将履行该请求,不会发生授权。 这是一个一般规则的例外,即一种机制即使没有请求也可以启用服务。- 参数
-
state
- 一个布尔值,指示是否应委托凭据。 - 异常
-
GSSException
- 包含以下主要错误代码:GSSException.FAILURE
- 另请参见:
-
getCredDelegState()
-
requestAnonymity
void requestAnonymity(boolean state) throws GSSException
要求发起人的身份不被披露给受理人。 该请求只能在上下文发起方进行,并且必须在首次调用initSecContext
之前完成。 并非所有机制都支持发起者匿名。 因此,应用程序应检查该请求是否符合getAnonymityState
方法。- 参数
-
state
- 一个布尔值,指示启动器是否应该作为匿名主体验证到接受者。 - 异常
-
GSSException
- 包含以下主要错误代码:GSSException.FAILURE
- 另请参见:
-
getAnonymityState()
-
requestConf
void requestConf(boolean state) throws GSSException
要求对wrap
方法启用数据机密性。 该请求只能在上下文发起方进行,并且必须在首次调用initSecContext
之前完成。 并不是所有的机制都支持机密性,而其他机制也可能使应用程序不要求它。 应用程序可以检查请求是否符合getConfState
方法。 如果启用机密性,则机制才能在MessageProp
对象中传递给wrap
方法的wrap
。启用机密性也将自动启用完整性。
- 参数
-
state
- 一个布尔值,表示是否应启用机密性。 - 异常
-
GSSException
- 包含以下主要错误代码:GSSException.FAILURE
- 另请参见:
-
getConfState()
,getIntegState()
,requestInteg(boolean)
,MessageProp
-
requestInteg
void requestInteg(boolean state) throws GSSException
要求对wrap
和getMIC
方法启用数据完整性。 该请求只能在上下文发起方进行,并且必须在首次调用initSecContext
之前完成。 并不是所有的机制都支持完整性,而其他机制也可能使得即使应用程序没有请求它也可能。 应用程序可以检查请求是否符合getIntegState
方法。禁用完整性也会自动禁用机密性。
- 参数
-
state
- 一个布尔值,表示是否应启用完整性。 - 异常
-
GSSException
- 包含以下主要错误代码:GSSException.FAILURE
- 另请参见:
-
getIntegState()
-
requestLifetime
void requestLifetime(int lifetime) throws GSSException
为上下文请求一秒钟的生命周期。 该方法只能在上下文发起方的一方进行调用,initSecContext
必须在首次调用initSecContext
之前进行。上下文的实际生命周期取决于底层机制的能力,应用程序应该调用
getLifetime
方法来确定这一点。- 参数
-
lifetime
- 所需的上下文生命周期(以秒为单位)。 使用INDEFINITE_LIFETIME
请求无限期生存期和DEFAULT_LIFETIME
请求默认生存期。 - 异常
-
GSSException
- 包含以下主要错误代码:GSSException.FAILURE
- 另请参见:
-
getLifetime()
-
setChannelBinding
void setChannelBinding(ChannelBinding cb) throws GSSException
设置在上下文建立期间要使用的通道绑定。 这种方法可以在上下文启动器和上下文接收方的一方调用,但必须在上下文建立开始之前调用。 这意味着发起方必须在首次拨打initSecContext
之前先调用它,并且接受方必须在首次调用acceptSecContext
之前调用它。- 参数
-
cb
- 要使用的通道绑定。 - 异常
-
GSSException
- 包含以下主要错误代码:GSSException.FAILURE
-
getCredDelegState
boolean getCredDelegState()
确定在此上下文中是否启用凭据委派。 它可以由上下文启动器和上下文接收器两者调用。 对于确定的答案,只有在上下文建立完成后才能调用此方法。 请注意,如果启动程序请求不允许该委托 ,则requestCredDeleg
方法将履行该请求,并且该方法将从该点开始返回发起方的false
。- 结果
- 如果启用了委托,则为true,否则为false。
- 另请参见:
-
requestCredDeleg(boolean)
-
getMutualAuthState
boolean getMutualAuthState()
确定在此上下文中是否启用了相互验证。 它可以由上下文启动器和上下文接收器两者调用。 对于确定的答案,只有在上下文建立完成后才能调用此方法。 请求相互验证的发起者可以在上下文完成后调用此方法,如果其请求未被执行,则处理上下文。- 结果
- 如果启用相互验证,则为true,否则为false。
- 另请参见:
-
requestMutualAuth(boolean)
-
getReplayDetState
boolean getReplayDetState()
确定是否从此上下文为每个消息安全服务启用重放检测。 它可以由上下文启动器和上下文接收器两者调用。 对于确定的答案,只有在上下文建立完成后才能调用此方法。 请求重播检测的发起者可以在上下文完成后调用此方法,如果其请求未被执行,则处理上下文。- 结果
- 如果启用重播检测,则为true,否则为false。
- 另请参见:
-
requestReplayDet(boolean)
-
getSequenceDetState
boolean getSequenceDetState()
确定是否从此上下文为每个消息安全服务启用了序列检查。 它可以由上下文启动器和上下文接收器两者调用。 对于确定的答案,只有在上下文建立完成后才能调用此方法。 请求序列检查的发起者可以在上下文完成后调用此方法,如果其请求未被执行,则处理上下文。- 结果
- 如果启用了序列检查,则为true,否则为false。
- 另请参见:
-
requestSequenceDet(boolean)
-
getAnonymityState
boolean getAnonymityState()
确定上下文启动器是否被上下文接受者匿名认证。 它可以由上下文启动器和上下文接收器以及随时调用。 在发起方,调用此方法确定启动器的身份是否已经在可能由initSecContext
生成的任何上下文建立令牌中被公开。 绝对必须匿名认证的发起方应在每次调用initSecContext
之后调用此方法,以确定生成的令牌是否应发送到对等体或上下文中止。 在接受方,调用此方法确定到目前为止,由acceptSecContext
处理的任何令牌是否泄露了发起者的身份。- 结果
- 如果上下文启动器仍然是匿名的,则为true,否则为false。
- 另请参见:
-
requestAnonymity(boolean)
-
isTransferable
boolean isTransferable() throws GSSException
通过使用export
方法确定上下文是否可转移到其他进程。 此呼叫仅在完全建立的上下文中有效。- 结果
- 如果此上下文可以导出,则为true,否则为false。
- 异常
-
GSSException
- 包含以下主要错误代码:GSSException.FAILURE
-
isProtReady
boolean isProtReady()
确定上下文是否准备好用于每个消息操作。 一些机制可以允许在上下文完全建立之前使用每消息操作。- 结果
-
如果真像方法
wrap
,unwrap
,getMIC
,并verifyMIC
可以用此背景下,在上下文创建的当前阶段使用,否则为false。
-
getConfState
boolean getConfState()
确定数据机密性是否可用于上下文。 该方法可以由上下文启动器和上下文接收方调用,但只有在isProtReady
或isEstablished
之一返回true
之后才可以true
。 如果这个方法返回true
,那么也是getIntegState
- 结果
- 如果保密服务可用,则为真,否则为false。
- 另请参见:
-
requestConf(boolean)
-
getIntegState
boolean getIntegState()
确定数据完整性是否可用于上下文。 该方法可以由上下文启动器和上下文接收方调用,但只有在isProtReady
或isEstablished
之一返回true
之后才可以true
。 如果getConfState
返回true,此方法将始终返回true
。- 结果
- 如果完整性服务可用,则为真,否则为false。
- 另请参见:
-
requestInteg(boolean)
-
getLifetime
int getLifetime()
确定此上下文的剩余生命周期。 它可以由上下文启动器和上下文接收器调用,但是对于一个确定的答案,只有在isEstablished
返回true之后才应该调用它。- 结果
- 剩余的生命周期为秒
- 另请参见:
-
requestLifetime(int)
-
getSrcName
GSSName getSrcName() throws GSSException
返回上下文启动器的名称。 此电话仅在isProtReady
或isEstablished
之一返回true
之后有效。- 结果
- GSSName是包含上下文启动器名称的MN。
- 异常
-
GSSException
- 包含以下主要错误代码:GSSException.FAILURE
- 另请参见:
-
GSSName
-
getTargName
GSSName getTargName() throws GSSException
返回上下文接收器的名称。 此呼叫仅在isProtReady
或isEstablished
之一返回true
之后有效。- 结果
- GSSName是包含上下文接受者名称的MN。
- 异常
-
GSSException
- 包含以下主要错误代码:GSSException.FAILURE
-
getMech
Oid getMech() throws GSSException
确定在这个上下文中使用什么机制。 可以在上下文完全建立之前调用此方法,但是在协商机制情况下,返回的机制可能会在连续调用中发生更改。- 结果
- 正在使用的机制的Oid
- 异常
-
GSSException
- 包含以下主要错误代码:GSSException.FAILURE
-
getDelegCred
GSSCredential getDelegCred() throws GSSException
- 结果
-
包含启动器的委托凭据的GSSCredential,或
null
没有委派凭据。 - 异常
-
GSSException
- 包含以下主要错误代码:GSSException.FAILURE
-
isInitiator
boolean isInitiator() throws GSSException
确定这是否是上下文启动器。 这可以在上下文启动器和上下文接收方的一方调用。- 结果
- 如果这是上下文启动器,则为true,如果为上下文接收器,则为false。
- 异常
-
GSSException
- 包含以下主要错误代码:GSSException.FAILURE
-
-