我正在研究Java TLS客戶端和服務器將經常通信。我知道談判TLS連接非常耗費資源和時間。我在GnuTLS中發現了一個非常有趣的解決方案。我感興趣的是可以創建具有恢復能力的Java TLS客戶端 - 使用先前協商的數據建立新連接。在Java中恢復TLS連接
祝
我正在研究Java TLS客戶端和服務器將經常通信。我知道談判TLS連接非常耗費資源和時間。我在GnuTLS中發現了一個非常有趣的解決方案。我感興趣的是可以創建具有恢復能力的Java TLS客戶端 - 使用先前協商的數據建立新連接。在Java中恢復TLS連接
祝
只要你使用相同的SSLSocketFactory創建插座,在Java JSSE實現會自動恢復現有會話,會話是否仍然有效。
您可以通過調用SSLSocket.getSession().getId()
來驗證這一點,並檢查兩個不同套接字是否使用同一個會話。
實際上,它是您必須保留的sslcontext,因爲它是包含ssl會話緩存的sslcontext。 SSLContext也有一個 SSLSessionContext getClientSessionContext()。這個SSLSessionContext允許你調整多少個ssl會話保持多久。
不幸的是,第三方訪問SSLContext設置的情況非常少見他們認爲他們幫你包裝它,或者他們什麼都不要求你提供SSLServerSocketFactory類名(甚至沒有預先調整過的實例一)。
在客戶端套接字的情況下,它是困難的。我通常必須準備一個線程本地套接字工廠,預計一個套接字將被打開幾十個更深的棧幀。
訣竅是提供一個輕量級的socketfactory(客戶端或服務器)的類名,它除了查找包含您初始化所需方式的真實工廠的threadlocal外(無論是作爲服務器還是客戶端的ssl會話緩存)。
只要你實際使用相同的'SSLContext'。 – EJP