模块  java.base
软件包  javax.net.ssl

Interface SSLSession

  • 所有已知实现类:
    ExtendedSSLSession

    public interface SSLSession
    在SSL中,会话用于描述两个实体之间的持续关系。 每个SSL连接一次涉及一个会话,但该会话可以同时或顺序地用于这些实体之间的许多连接。 连接上使用的会话也可以由不同的会话替换。 作为SSL握手协议的一部分,会话被创建或重新加入。 由于影响安全性或资源使用的策略,或者显式调用invalidate的应用程序,会话可能会失效。 会话管理策略通常用于调整性能。

    除标准会话属性外,SSL会话还公开这些只读属性:

    • 同伴身份。 会话位于特定客户端和特定服务器之间。 可以将对等体的身份建立为会话设置的一部分。 对等方通常由X.509证书链标识。
    • 密码套件名称。 密码套件描述了特定会话中连接使用的加密保护类型。
    • 同伴主持人。 会话中的所有连接都在同一个主机之间。 可以使用连接另一端的主机地址。

    会话可能会明确无效。 当遇到某些类型的错误时,也可以隐式地进行失效。

    从以下版本开始:
    1.4
    • 方法详细信息

      • getId

        byte[] getId()
        返回分配给此Session的标识符。
        结果
        会话标识符
      • getSessionContext

        SSLSessionContext getSessionContext()
        返回绑定此会话的上下文。

        在某些环境中,此上下文可能不可用,在这种情况下,此方法返回null。

        如果上下文可用且安装了安全管理器,则调用者可能需要访问权限,否则可能会引发安全性异常。 在Java环境中,使用SSLPermission("getSSLSessionContext")权限调用安全管理器的checkPermission方法。

        结果
        用于此会话的会话上下文,如果上下文不可用,则为null。
        异常
        SecurityException - 如果调用线程没有获取SSL会话上下文的权限。
      • getCreationTime

        long getCreationTime()
        返回创建此会话表示的时间,以UTC时间1970年1月1日午夜以来的毫秒数为单位。
        结果
        本次会议的创建时间
      • getLastAccessedTime

        long getLastAccessedTime()
        返回会话级基础结构访问此会话表示的最后时间,自UTC时间1970年1月1日午夜起的毫秒数。

        Access表示使用会话数据建立的新连接。 应用程序级别操作(例如获取或设置与会话关联的值)不会反映在此访问时间中。

        此信息在会话管理策略中特别有用。 例如,会话管理器线程可以将所有会话留在给定的上下文中,这些会话在很长一段时间内没有被使用过; 或者,可以根据年龄对会话进行排序以优化某些任务。

        结果
        访问本次会议的最后一次
      • invalidate

        void invalidate()
        使会话无效。

        未来的连接将无法恢复或加入此会话。 但是,使用此会话的任何现有连接都可以继续使用该会话,直到连接关闭。

        另请参见:
        isValid()
      • isValid

        boolean isValid()
        返回此会话是否有效并可用于恢复或加入。
        结果
        如果此会话可能重新加入,则为true。
        从以下版本开始:
        1.5
        另请参见:
        invalidate()
      • putValue

        void putValue​(String name,
                      Object value)
        使用给定的name将指定的value对象绑定到会话的应用程序层数据中。

        使用相同的name任何现有绑定都将被替换。 如果新(或现有) value实现SSLSessionBindingListener接口, value通知由value表示的对象。

        出于安全原因,在不同的访问控制上下文中可能看不到相同的命名值。

        参数
        name - 数据对象将绑定到的名称。 这可能不是空的。
        value - 要绑定的数据对象。 这可能不是空的。
        异常
        IllegalArgumentException - 如果任一参数为null。
      • getValue

        Object getValue​(String name)
        返回绑定到会话的应用程序层数据中给定名称的对象。 如果没有这样的绑定,则返回null。

        出于安全原因,在不同的访问控制上下文中可能看不到相同的命名值。

        参数
        name - 要查找的绑定的名称。
        结果
        绑定到该名称的值,如果绑定不存在,则返回null。
        异常
        IllegalArgumentException - 如果参数为null。
      • removeValue

        void removeValue​(String name)
        删除会话的应用程序层数据中绑定到给定名称的对象。 如果没有绑定到给定名称的对象,则不执行任何操作。 如果绑定的现有对象实现SessionBindingListener接口,则会相应地通知它。

        出于安全原因,在不同的访问控制上下文中可能看不到相同的命名值。

        参数
        name - 要在不同的访问控制上下文中删除的对象的名称
        异常
        IllegalArgumentException - 如果参数为null。
      • getValueNames

        String[] getValueNames()
        返回绑定到Session中的所有应用程序层数据对象的名称数组。

        出于安全原因,在不同的访问控制上下文中可能看不到相同的命名值。

        结果
        绑定到此Session的对象的非null(可能为空)数组。
      • getPeerCertificates

        Certificate[] getPeerCertificates()
                                   throws SSLPeerUnverifiedException
        返回作为定义会话的一部分而建立的对等方的标识。

        注意:此方法仅在使用基于证书的密码套件时使用; 将它与非基于证书的密码套件(如Kerberos)一起使用会抛出SSLPeerUnverifiedException。

        注意:返回的值可能不是有效的证书链,因此不应依赖于信任决策。

        结果
        一个有序的对等证书数组,首先是对等方自己的证书,然后是任何证书颁发机构。
        异常
        SSLPeerUnverifiedException - 如果未验证对等方的身份
        另请参见:
        getPeerPrincipal()
      • getLocalCertificates

        Certificate[] getLocalCertificates()
        返回握手期间发送给对等方的证书。

        注意:此方法仅在使用基于证书的密码套件时才有用。

        当多个证书可用于握手时,实现选择它认为可用的“最佳”证书链,并将其传输到另一方。 此方法允许调用者知道实际使用的证书链。

        结果
        一个有序的证书数组,首先是本地证书,然后是任何证书颁发机构。 如果未发送证书,则返回null。
        另请参见:
        getLocalPrincipal()
      • getPeerCertificateChain

        @Deprecated(since="9")
        X509Certificate[] getPeerCertificateChain()
                                           throws SSLPeerUnverifiedException
        Deprecated.
        The getPeerCertificates() method that returns an array of java.security.cert.Certificate should be used instead.
        返回标识为定义会话一部分的对等方的标识。

        注意:此方法仅在使用基于证书的密码套件时使用; 将它与非基于证书的密码套件(如Kerberos)一起使用会抛出SSLPeerUnverifiedException。

        注意:返回的值可能不是有效的证书链,因此不应依赖于信任决策。

        注意:此方法的存在是为了与先前版本兼容。 新应用程序应使用getPeerCertificates()

        结果
        一个有序的对等X.509证书数组,首先是对等方自己的证书,然后是任何证书颁发机构。 (证书采用原始JSSE证书X509Certificate格式。)
        异常
        SSLPeerUnverifiedException - 如果未验证对等方的身份
        另请参见:
        getPeerPrincipal()
      • getLocalPrincipal

        Principal getLocalPrincipal()
        返回握手期间发送给对等方的主体。
        结果
        校长寄给同伴。 返回基于X509的密码套件的终端实体证书的X500Principal,以及Kerberos密码套件的KerberosPrincipal。 如果没有发送主体,则返回null。
        从以下版本开始:
        1.5
        另请参见:
        getLocalCertificates()getPeerPrincipal()
      • getCipherSuite

        String getCipherSuite()
        返回SSL密码套件的名称,该密码套件用于会话中的所有连接。

        这定义了为连接上发送的数据提供的保护级别,包括所使用的加密类型以及如何进行身份验证的大多数方面。

        结果
        会话的密码套件的名称
      • getProtocol

        String getProtocol()
        返回用于会话中所有连接的协议的标准名称。

        这定义了连接中使用的协议。

        结果
        用于会话中所有连接的协议的标准名称。
      • getPeerHost

        String getPeerHost()
        返回此会话中对等方的主机名。

        对于服务器,这是客户端的主机; 对于客户端,它是服务器的主机。 该名称可能不是完全限定的主机名,甚至可能不是主机名,因为它可能表示对等方网络地址的字符串编码。 如果需要这样的名称,可以通过基于此方法返回的值的名称服务来解析它。

        此值未经过身份验证,因此不应依赖。 它主要用作SSLSession缓存策略的提示。

        结果
        对等主机的主机名,如果没有可用信息,则为null。
      • getPeerPort

        int getPeerPort()
        返回此会话中对等方的端口号。

        对于服务器,这是客户端的端口号; 对于客户端,它是服务器的端口号。

        此值未经过身份验证,因此不应依赖。 它主要用作SSLSession缓存策略的提示。

        结果
        对等主机的端口号,如果没有可用信息,则为-1。
        从以下版本开始:
        1.5
      • getPacketBufferSize

        int getPacketBufferSize()
        获取使用此会话时预期的最大SSL / TLS / DTLS数据包的当前大小。

        使用此会话的SSLEngine可以生成任何大小的SSL / TLS / DTLS数据包,包括此方法返回的值。 所有SSLEngine网络缓冲区的大小应至少为此大,以避免在执行wrapunwrap调用时出现空间不足问题。

        结果
        当前最大预期网络数据包大小
        从以下版本开始:
        1.5
        另请参见:
        SSLEngine.wrap(ByteBuffer, ByteBuffer)SSLEngine.unwrap(ByteBuffer, ByteBuffer)
      • getApplicationBufferSize

        int getApplicationBufferSize()
        获取使用此会话时预期的最大应用程序数据的当前大小。

        SSLEngine应用程序数据缓冲区必须足够大,以容纳来自任何收到的入站网络应用程序数据包的应用程序数据。 通常,出站应用程序数据缓冲区可以是任何大小。

        结果
        当前最大预期应用程序包大小
        从以下版本开始:
        1.5
        另请参见:
        SSLEngine.wrap(ByteBuffer, ByteBuffer)SSLEngine.unwrap(ByteBuffer, ByteBuffer)