java中的SSLSession

jopen 9年前發布 | 23K 次閱讀 Java開發 SSLSession

一、概述

該接口位于javax.net.ssl 下,聲明:public interface SSLSession

在 SSL 中,會話用來描述兩個實體間正在發生的關系。每個 SSL 連接在某一時刻都會涉及一個會話,但是該會話可以同時地或相繼地用在這些實體的多個連接上。還可以用不同的會話代替某一連接上使用的會話。會話是作為 SSL 握手協議的一部分創建或重新加入的。影響安全或資源使用的策略或由應用程序顯式調用invalidate可能使會話無效。會話管理策略通常用來調優性能。

除了標準會話屬性之外,SSL 會話還會公開以下這些只讀屬性:

  • 同級身份。 會話是在特定客戶端和特定服務器之間進行的。同級身份可能已作為會話設置的一部分建立。同位體通常是用 X.509 證書鏈標識。
  • 密碼套件的名稱。密碼套件描述在特定會話中的連接使用的加密保護的種類。
  • 同級主機。一次會話的所有連接都是在相同的兩個主機之間進行的。連接的另一端的主機的地址是可用的。
  • </ul>

    可以顯式地使會話無效。當遇到某種錯誤時,也可以隱式地使會話無效。 


    二、方法

    1、byte[] getId()  返回分配給此會話的標識符。


    2、SSLSessionContext getSessionContext()  返回此會話所在的上下文。

    此上下文在一些環境中可能不可用,在這種情況下,此方法返回 null。

    如果存在上下文并且已安裝了一個安全管理器,則調用者可能需要相應的權限才能訪問上下文,否則可能拋出安全異常。在 Java 環境中,使用SSLPermission("getSSLSessionContext")權限調用安全管理器的checkPermission方法。

    返回:用于此會話的會話上下文;如果上下文不可用,則返回 null。拋出: SecurityException- 如果調用線程沒有獲取 SSL 會話上下文的權限。

    3、long getCreationTime() 返回創建此會話表示的時間,該時間是自協調世界時 1970 年 1 月 1 日午夜起經過的毫秒數。


    4、long getLastAccessedTime() 返回此會話表示上一次被會話層應用訪問的時間,該時間是自協調世界時 1970 年 1 月 1 日午夜起經過的毫秒數。

    訪問將指示使用會話數據建立一個新的連接。訪問期間并不反映應用級操作,例如獲取或設置與會話相關的值。

    此信息在會話管理策略中特別有用。例如,會話管理器線程可以將所有會話放在一個很長時間未被使用的給定上下文中;或者可能根據生存時間對會話進行排序,以優化一些任務。


    5、void invalidate()  使會話失效。

    將來的連接無法恢復或加入此會話。但是,任何使用此會話的現有連接可以繼續使用此會話,直到該連接關閉。 


    6、boolean isValid()   返回此會話對于恢復和加入是否是有效的和可用的。


    7、void putValue(String name,Object value)  使用給定的name將指定的value對象綁定到會話的應用層數據中。 

    替換任何使用相同name的現有綁定。如果新的(或現有)value實現了SSLSessionBindingListener接口,則會相應地通知value表示的對象。

    出于安全原因,具有相同名稱的值在不同的訪問控制上下文之間是不可見的。

    參數:name- 數據對象將要綁定到的名稱。此參數不可以為 null。value- 將要綁定的數據對象。此參數不可以為 null。拋出: IllegalArgumentException- 如果任何一個參數為 null。

    8、Object getValue(String name)  返回會話的應用層數據中的綁定到給定名稱的對象。如果不存在這種綁定,則返回 null。

    出于安全原因,具有相同名稱的值在不同的訪問控制上下文之間是不可見的。 

    參數:name- 要查找的綁定的名稱。返回:綁定到該名稱的值;如果不存在綁定,則返回 null。拋出: IllegalArgumentException- 如果參數為 null

    9、void removeValue(String name)   移除會話的應用層數據中綁定到給定名稱的對象。

    如果沒有對象綁定到給定名稱,則什么都不做。如果綁定的現有對象實現了SessionBindingListener接口,則以適當的方式通知它。

    出于安全原因,具有相同名稱的值在不同的訪問控制上下文之間是不可見的。 

    參數:name- 將移除的在不同訪問控制上下文之間可見的對象名稱拋出: IllegalArgumentException- 如果參數為 null。

    10、String[] getValueNames()  返回綁定到會話中的所有應用層數據對象的名稱組成的數組。

    出于安全原因,具有相同名稱的值在不同的訪問控制上下文之間是不可見的。

    返回:綁定到此會話的對象的名稱組成的非 null(可能為空)數組。

    11、Certificate[] getPeerCertificates() throws SSLPeerUnverifiedException  返回同級身份,該同級身份是作為定義會話的一部分而建立的。

    注:僅當使用基于證書的密碼套件時才可以使用此方法;將它與非基于證書的密碼套件(如 Kerberos)一起使用將拋出 SSLPeerUnverifiedException。 

    返回:同級證書的有序數組,同位體自己的證書緊跟在任何證書授權之后。拋出: SSLPeerUnverifiedException- 如果同級身份未被驗證

    12、Certificate[] getLocalCertificates()  返回握手期間發送給同位體的證書。

    注:僅當使用基于證書的密碼套件時此方法才有用。

    當在一次握手中有多個證書可供使用時,具體實現可以選擇使用它認為“最好的”證書鏈,并將該證書鏈傳輸給另一端。此方法允許調用者知道實際使用了哪些證書鏈。

    返回:證書的有序數組,本地證書緊跟在任何證書授權之后。如果沒有發送任何證書,則返回 null。13、X509Certificate[] getPeerCertificateChain() throws SSLPeerUnverifiedException  返回同級身份,該同級身份被標識作為定義會話的一部分。

    注:僅當使用基于證書的密碼套件時才可以使用此方法;將它與非基于證書的密碼套件(如 Kerberos)一起使用將拋出 SSLPeerUnverifiedException。

    注:此方法存在是為了與以前的版本兼容。新的應用程序應該使用 getPeerCertificates()

    返回:同級 X.509 證書的有序數組,同位體自己的證書緊跟在任何證書授權之后。(證書格式采用原來的 JSSE 證書 X509Certificate 格式。)拋出: SSLPeerUnverifiedException- 如果同級身份未被驗證另請參見:getPeerPrincipal()

    14、Principal getPeerPrincipal() throws SSLPeerUnverifiedException  返回同級身份,該同級身份是作為定義會話的一部分而建立的。

    返回:同位體的主體。對于基于 X509 的密碼套件,返回最終實體證書的 X500Principal;對于 Kerberos 密碼套件,返回 KerberosPrincipal。拋出: SSLPeerUnverifiedException- 如果同級身份未被驗證從以下版本開始: 1.5另請參見:getPeerCertificates(), getLocalPrincipal()15、Principal getLocalPrincipal()   返回握手期間發送給同位體的主體。返回:發送給同位體的主體。返回基于 X509 的密碼套件的最終實體證書的 X500Principal,以及 Kerberos 的密碼套件的 KerberosPrincipal。如果沒有發送任何主體,則返回 null。從以下版本開始: 1.5另請參見:getLocalCertificates(), getPeerPrincipal()

    16、String getCipherSuite()  返回會話中的所有連接所使用的 SSL 密碼套件的名稱。

    此密碼套件定義了針對連接上發送的數據所提供的保護級別,包括所使用的加密類型和如何進行驗證的大多數方面。


    17、String getProtocol()  返回會話中的所有連接使用的協議的標準名稱。

    此方法定義了連接中使用的協議。 


    18、String getPeerHost()  返回此會話中同位體的主機名稱。

    對于服務器來說,該主機是客戶端的主機;對于客戶端來說,它是服務器的主機。此名稱可以不是一個完全限定的主機名或根本不是主機名,因為它可以表示同級網絡地址的字符串編碼。如果需要這樣的名稱,可以根據此方法返回的值通過名稱服務來解析該名稱。

    此值并沒有經過驗證,因此不應依賴它。它主要被用作SSLSession緩存策略的提示。

    返回:同級主機的主機名稱;如果沒有信息可用,則返回 null。

    19、int getPeerPort()  返回此會話中同位體的端口號。

    對于服務器來說,該端口號是客戶端的端口號;對于客戶端來說,它是服務器的端口號。

    此值并沒有經過驗證,因此不應依賴它。它主要被用作SSLSession緩存策略的提示。 


    20、int getPacketBufferSize()  獲取使用此會話時期望的最大 SSL/TLS 包的當前大小。

    使用此會話的SSLEngine可以生成任意大小并包括此方法返回的值的 SSL/TLS 包。所有SSLEngine網絡緩沖區的大小最少應該是這么大,以防止執行wrap和unwrap時出現空間不足問題。

    返回:期望網絡包大小的當前最大值21、int getApplicationBufferSize()  獲取使用此會話時期望的最大應用程序數據的當前大小。

    SSLEngine應用數據緩沖區必須足夠大以容納所接收的取自任何入站網絡應用數據包的應用數據。通常,出站應用數據緩沖區可以為任意大小。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!