2016-09-09 49 views
0

考慮這種情況:SSL是否有內置的可檢測到連接斷開的內容?

[wanting to write]  [sent token success] 
Application -------> SSL -----------> 
            | *peer drops* 
       [waiting to read]  | 
      ***blocked***<------------ 

換句話說,你的應用程序想要寫的東西,但是SSL的內部狀態是WANT_READ。另一方面,對等連接已經下降。

SSL可以通過它自己的一些保持活動檢查來檢測它嗎?在這種情況下你能做什麼?

回答

0

SSL通常會檢測到底層傳輸層(即TCP)的連接問題。這意味着通過使用TCP keep alive,可以檢測到對等體消失而沒有正確連接關閉。除此之外,在TLS級別還有heartbeat extension,但與TCP保持活動相反,它沒有得到普遍支持。

+0

不知道爲什麼有人低估了這一點。是的,我正在考慮使用TCP保持活力來處理這種情況。我很驚訝協議中沒有內容來處理它。 – minus

+0

@minus:首先是TLS心跳擴展,儘管它們的主要目的可能是DTLS(即通過不可靠的UDP)。但更重要的是:爲什麼會在傳輸層問題中增加一些檢測到會話層,特別是因爲傳輸層已經有一個檢測需要使用(即TCP保持活動狀態)。 –

+0

是的。在我的情況下,我可以使用心跳擴展。 – minus

0

如果SSL通過SSL close_notify消息從SSL的角度檢測到未正確終止的連接,它會將其視爲截斷攻擊,並會給出錯誤消息或異常,具體取決於哪個您正在使用的API。

您的應用程序想要寫點東西,但SSL內部狀態是WANT_READ。另一方面,對等連接已經下降。

你想要閱讀的是close_notify或者錯誤信息或異常。無論如何,當它說WANT_READ時,你必須閱讀。

+0

我理解的問題是關於連接斷開的情況,即沒有合適的關閉,但客戶端只是消失(即系統崩潰,路由器/防火牆狀態到期...)。在這種情況下,SSL讀取將掛起,直到底層TCP連接發出錯誤信號。沒有TCP保持活動或套接字超時(即默認情況下),這個錯誤不會發生。 –

相關問題