在与OpenSSL的FTP传输连接上恢复TLS / SSL会话

时间:2011-10-16 18:25:41

标签: session ssl ftp openssl resume

我是实施FTP客户端(WinSCP)的开源开发人员。

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

E.g。 vsftpd的:
https://scarybeastsecurity.blogspot.com/2009/02/vsftpd-210-released.html


我正在使用OpenSSL来实现SSL层。

我尝试了一种显而易见的方式来实现会话简历,即使用SSL_get1_sessionSSL_set_session,如下所示:
https://www.linuxjournal.com/article/5487

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

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

我还尝试了几种克隆会话的方法,例如:使用i2d_SSL_SESSION / d2i_SSL_SESSION。也没有帮助。

我真的被困在这里。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您必须使用以下内容在SSL_CTX对象上专门启用客户端会话缓存:

SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_CLIENT);

您可能还需要使用SSL_CTX_set_timeout()增加默认会话缓存超时(默认值为300秒)。

(您还必须从同一个SSL对象创建SSL_CTX个对象。

答案 1 :(得分:2)

最后使用SSL_get1_sessionSSL_set_session。第一次尝试时我必须错误地使用它们。

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