Session 使用OpenSSL在FTP传输连接上恢复TLS/SSL会话

Session 使用OpenSSL在FTP传输连接上恢复TLS/SSL会话,session,ssl,ftp,openssl,resume,Session,Ssl,Ftp,Openssl,Resume,我是实现FTP客户端()的开源开发人员 我正在尝试从传输套接字上的FTP控制套接字恢复TLS/SSL会话。 一些FTP服务器开始需要这个 例如vsftpd: 我正在使用OpenSSL实现SSL层 我尝试了实现会话恢复的明显方法,即使用SSL\u get1\u session和SSL\u set\u session,如下所示: 虽然它不起作用。我仍然无法连接到任何需要TLS会话恢复的FTP服务器(如vsftpd) 我怀疑这个问题可能是因为在我的例子中,有两个并行的TLS连接不能共享同一个TL

我是实现FTP客户端()的开源开发人员

我正在尝试从传输套接字上的FTP控制套接字恢复TLS/SSL会话。 一些FTP服务器开始需要这个

例如vsftpd:


我正在使用OpenSSL实现SSL层

我尝试了实现会话恢复的明显方法,即使用
SSL\u get1\u session
SSL\u set\u session
,如下所示:

虽然它不起作用。我仍然无法连接到任何需要TLS会话恢复的FTP服务器(如vsftpd)

我怀疑这个问题可能是因为在我的例子中,有两个并行的TLS连接不能共享同一个TLS会话。这与linuxjournal.com上的示例不同,在linuxjournal.com上,第一个连接在另一个连接打开之前关闭

我还尝试了几种方法来克隆会话,例如使用
i2d\u SSL\u会话
/
d2i\u SSL\u会话
。也没用

我真的被困在这里了


提前感谢您的帮助。

您必须在
SSL\u CTX
对象上启用客户端会话缓存,具体操作如下:

SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_CLIENT);
您可能还需要使用
SSL\u CTX\u set\u timeout()
增加默认会话缓存超时(默认值为300秒)


(您还必须从相同的
SSL\u CTX
对象创建
SSL
对象)。

使用
SSL\u get1\u会话
SSL\u set\u会话
最终成功。我第一次试的时候肯定用错了

  • 在控制连接上建立TLS/SSL会话后,使用来检索会话。我专门从由when
    where&SSL\u ST\u CONNECT
    设置的回调中执行此操作
  • 为数据连接设置TLS/SSL会话时,使用对控制连接会话的引用调用