2011-10-16 42 views
3

我是實現FTP客戶端的開源開發人員(WinSCP)。與OpenSSL的FTP傳輸連接恢復TLS/SSL會話

我正試圖從傳輸套接字上的FTP控制套接字恢復TLS/SSL會話。 一些FTP服務器開始需要這個。

例如vsftpd的:
https://scarybeastsecurity.blogspot.com/2009/02/vsftpd-210-released.html


我使用OpenSSL實現SSL層。

我試圖實現會話恢復明顯的方式,即使用SSL_get1_sessionSSL_set_session,喜歡這裏:
https://www.linuxjournal.com/article/5487?page=0,1

雖然這是行不通的。我仍然無法連接到任何需要TLS會話恢復的FTP服務器(如vsftpd)。

我懷疑問題可能是由於在我的情況下,有兩個並行的TLS連接,它們不能共享相同的TLS會話。這與linuxjournal.com上的示例不同,第一個連接在另一個打開之前已關閉。

我也嘗試了幾種克隆會話的方法,例如,使用i2d_SSL_SESSION/d2i_SSL_SESSION。也沒有幫助。

我真的被困在這裏。

在此先感謝您的幫助。

回答

1

使用SSL_get1_sessionSSL_set_session最後工作。第一次嘗試時我必須錯誤地使用它們。

  • 一旦建立了控制連接上的TLS/SSL會話,使用SSL_get1_session檢索會話。我專門從SSL_set_info_callback設置的回調中調用where & SSL_ST_CONNECT
  • 爲數據連接設置TLS/SSL會話時,請參考控制連接會話調用SSL_set_session
2

你必須明確你的SSL_CTX對象上啓用客戶端會話緩存使用:

SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_CLIENT); 

您可能還需要增加默認的會話緩存超時(默認爲300秒),使用SSL_CTX_set_timeout()

(您還必須從相同的SSL_CTX對象創建您的SSL對象)。