2011-10-16 41 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对象)。