2011-01-16 163 views
3

HTTP是一種應用程序協議,可以在不影響HTTP應用程序(性能除外)的情況下關閉並重新打開底層TCP連接。
通過使用HTTP1.1,我們使用持久連接,但服務器或客戶端仍然可以在任何時候關閉連接。
對於安全性,HTTP通過SSL/TLS使用TCP。
我的理解是,SSL的行爲很像一個應用程序,至少這是TCP如何「查看」SSL。
我的問題是,如果基礎TCP套接字在安全連接建立後的某一點關閉,這是否意味着SSL會話失效,各方應該重新開始ssl握手?
或者底層的TCP連接與TLS會話無關?http持久連接和ssl會話

謝謝!

回答

3

這是否意味着SSL會話失效,各方應該重新開始ssl握手?

是的,SSL/TLS會話結束並且握手必須重新建立。 TLS包含恢復會話的機制(仍然會執行一些操作,但少於完全握手),但並非所有應用程序都支持它。

請參閱http://ietf.org/rfc/rfc2246.txt,F.1.4關於恢復的技術細節。

+0

@Eugene:在握手之後,由於已經交換了安全細節(算法等),所以SSL對等部分具有建立安全通道(加密/解密)所需的信息。這部分據我所知,似乎與底層無關TCP連接,它獲得加密塊並通過套接字傳輸它們。如何關閉tcp連接,使之前同意的SSL方(客戶端/服務器)的安全細節無效?這部分我不明白。請您詳細說明一下嗎? – Cratylus

+0

@ user384706從技術角度來看,SSL/TLS不關心連接,可以通過UDP使用(UDP使用TLS的修改,名爲DTLS),命名管道,鴿子郵件等(我們曾經實現過它通過基於消息的通信信道)。但是,人們一致認爲,爲防止底層通道的某些攻擊斷開,SSL連接也會自動失效。一般來說,如果您同時實現通信的客戶端和服務器端,並且您也控制SSL功能(例如使用我們的組件時),則不會強制您執行此操作。 –

+0

@Eugene:那麼認爲TLS會議無效的最佳做法是?它不是由任何RFC強制規定的,也不是由TLS RFC暗示的,對嗎? – Cratylus

2

http://publib.boulder.ibm.com/httpserv/ihsdiag/ihs_performance.html#SSL

SSL會話是用於安全通信的客戶端和Web服務器之間的邏輯連接。在建立SSL會話期間,使用公鑰密碼術來在客戶端和服務器之間交換共享的祕密主密鑰,並確定通信的其他特徵,例如密碼。隨後使用在SSL握手期間創建的共享密鑰,通過對稱密鑰加密對會話後面的數據傳輸進行加密和解密。

共享密鑰的生成非常佔用CPU資源。爲了避免爲每個TCP連接生成共享密鑰,可以爲多個連接重用相同的SSL會話。客戶端必須請求在後續握手中重複使用相同的SSL會話,並且服務器必須緩存SSL會話標識符。滿足這些要求時,後續TCP連接的握手需要的服務器CPU要少得多(在某些測試中,要少80%)。通常使用的所有Web瀏覽器都能夠重用相同的SSL會話。但是,自定義Web客戶端有時不具備必要的支持。