软件包  org.ietf.jgss

Interface GSSContext

  • 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直到上下文建立的循环中。 在此循环中, initSecContextacceptSecContext方法产生应用程序向对等体发送的令牌。 对等体通过任何这样的令牌作为输入到其acceptSecContextinitSecContext视情况而定)。

    在上下文建立阶段,可以调用isProtReady方法来确定上下文是否可以用于wrapgetMIC的每消息操作。 这允许应用程序对尚未完全建立的上下文使用每个消息操作。

    在上下文建立或isProtReady方法返回true ,可以调用查询例程来确定已建立上下文的实际特性和服务。 该应用程序还可以开始使用wrapgetMIC的每消息方法来获取应用程序提供的数据的加密操作。

    当上下文不再需要时,应用程序应该调用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)
      要求对 wrapgetMIC方法启用数据完整性。
      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_TOKENGSSException.BAD_MICGSSException.NO_CREDGSSException.CREDENTIALS_EXPIREDGSSException.BAD_BINDINGSGSSException.OLD_TOKENGSSException.DUPLICATE_TOKENGSSException.BAD_NAMETYPEGSSException.BAD_MECHGSSException.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_TOKENGSSException.BAD_MICGSSException.NO_CREDGSSException.CREDENTIALS_EXPIREDGSSException.BAD_BINDINGSGSSException.OLD_TOKENGSSException.DUPLICATE_TOKENGSSException.BAD_NAMETYPEGSSException.BAD_MECHGSSException.FAILURE
      • acceptSecContext

        byte[] acceptSecContext​(byte[] inToken,
                                int offset,
                                int len)
                         throws GSSException
        在从对等体接收到令牌时,由上下文接受者调用。 该方法可以返回应用程序需要发送给对等体的输出令牌,以通过其initSecContext调用进一步处理。

        应用程序可以调用isEstablished来确定该对等体的上下文建立阶段是否完成。 的返回值falseisEstablished表明更多的标记,预计将要提供给该方法。 完成上下文建立后,可以通过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_TOKENGSSException.BAD_MICGSSException.NO_CREDGSSException.CREDENTIALS_EXPIREDGSSException.BAD_BINDINGSGSSException.OLD_TOKENGSSException.DUPLICATE_TOKENGSSException.BAD_MECHGSSException.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_TOKENGSSException.BAD_MICGSSException.NO_CREDGSSException.CREDENTIALS_EXPIREDGSSException.BAD_BINDINGSGSSException.OLD_TOKENGSSException.DUPLICATE_TOKENGSSException.BAD_MECHGSSException.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的消息大小的限制。 返回最大消息大小,如果提交给具有相同confReqqop参数的wrap方法,则会导致输出令牌不超过maxTokenSize字节。

        此呼叫旨在供通过施加最大消息大小的协议进行通信的应用程序使用。 它使应用程序在应用保护之前对消息进行分段。

        推荐使用GSS-API实现,但在getWrapSizeLimit时检测无效的QOP值不是必需的。 此例程仅保留最大消息大小,而不保证消息保护的特定QOP值的可用性。

        参数
        qop - 将要求提供防护等级。
        confReq - true如果要求提供隐私提供隐私, false否则。
        maxTokenSize - 由wrap发出的令牌的期望最大大小。
        结果
        给定输出令牌大小的输入令牌的最大大小
        异常
        GSSException -包含以下主要错误代码: GSSException.CONTEXT_EXPIREDGSSException.BAD_QOPGSSException.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_EXPIREDGSSException.BAD_QOPGSSException.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_EXPIREDGSSException.BAD_QOPGSSException.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_TOKENGSSException.BAD_MICGSSException.CONTEXT_EXPIREDGSSException.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_TOKENGSSException.BAD_MICGSSException.CONTEXT_EXPIREDGSSException.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设置为0msgProp以请求默认的QOP。 或者通过null for msgProp以请求默认的QOP。
        结果
        包含要发送到对等体的令牌的字节[]。
        异常
        GSSException -包含以下主要错误代码: GSSException.CONTEXT_EXPIREDGSSException.BAD_QOPGSSException.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到0msgProp来请求默认QOP。 或者通过null查询msgProp以请求默认的QOP。
        异常
        GSSException -包含以下主要错误代码: GSSException.CONTEXT_EXPIREDGSSException.BAD_QOPGSSException.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.UNAVAILABLEGSSException.CONTEXT_EXPIREDGSSException.NO_CONTEXTGSSException.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.isDuplicateTokenMessageProp.isOldToken方法将返回传递给unwrap方法或verifyMIC方法的MessageProp对象的有效结果。

        参数
        state - 一个布尔值,指示是否应在已建立的上下文中启用重放检测。
        异常
        GSSException - 包含以下主要错误代码: GSSException.FAILURE
        另请参见:
        getReplayDetState()
      • requestSequenceDet

        void requestSequenceDet​(boolean state)
                         throws GSSException
        请求在上下文建立后为每个消息安全服务启用序列检查。 该请求只能在上下文发起方进行,并且必须在首次调用initSecContext之前完成。 在上下文建立过程中,序列检查不是一个选项,而是底层机制的功能。

        并不是所有的机制都支持序列检查,一些机制可能需要序列检查,即使应用程序没有。 因此,应用程序应检查该请求是否符合getSequenceDetState方法。 如果序列检查已启用,则MessageProp.isDuplicateTokenMessageProp.isOldTokenMessageProp.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
        要求对wrapgetMIC方法启用数据完整性。 该请求只能在上下文发起方进行,并且必须在首次调用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​()
        确定上下文是否准备好用于每个消息操作。 一些机制可以允许在上下文完全建立之前使用每消息操作。
        结果
        如果真像方法 wrapunwrapgetMIC ,并 verifyMIC可以用此背景下,在上下文创建的当前阶段使用,否则为false。
      • getConfState

        boolean getConfState​()
        确定数据机密性是否可用于上下文。 该方法可以由上下文启动器和上下文接收方调用,但只有在isProtReadyisEstablished之一返回true之后可以true 如果这个方法返回true ,那么也是getIntegState
        结果
        如果保密服务可用,则为真,否则为false。
        另请参见:
        requestConf(boolean)
      • getIntegState

        boolean getIntegState​()
        确定数据完整性是否可用于上下文。 该方法可以由上下文启动器和上下文接收方调用,但只有在isProtReadyisEstablished之一返回true之后可以true 如果getConfState返回true,此方法将始终返回true
        结果
        如果完整性服务可用,则为真,否则为false。
        另请参见:
        requestInteg(boolean)
      • getLifetime

        int getLifetime​()
        确定此上下文的剩余生命周期。 它可以由上下文启动器和上下文接收器调用,但是对于一个确定的答案,只有在isEstablished返回true之后才应该调用它。
        结果
        剩余的生命周期为秒
        另请参见:
        requestLifetime(int)
      • getMech

        Oid getMech​()
             throws GSSException
        确定在这个上下文中使用什么机制。 可以在上下文完全建立之前调用此方法,但是在协商机制情况下,返回的机制可能会在连续调用中发生更改。
        结果
        正在使用的机制的Oid
        异常
        GSSException - 包含以下主要错误代码: GSSException.FAILURE
      • getDelegCred

        GSSCredential getDelegCred​()
                            throws GSSException
        获取由上下文启动器委派给上下文接收器的凭据。 应该仅在上下文接受方的一方进行调用,一旦完全建立了上下文。 呼叫者可以使用方法getCredDelegState来确定是否有任何委托凭据。
        结果
        包含启动器的委托凭据的GSSCredential,或 null没有委派凭据。
        异常
        GSSException - 包含以下主要错误代码: GSSException.FAILURE
      • isInitiator

        boolean isInitiator​()
                     throws GSSException
        确定这是否是上下文启动器。 这可以在上下文启动器和上下文接收方的一方调用。
        结果
        如果这是上下文启动器,则为true,如果为上下文接收器,则为false。
        异常
        GSSException - 包含以下主要错误代码: GSSException.FAILURE