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

问题描述 投票:4回答:2

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

我正在尝试从传输套接字上的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

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

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

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

我真的被困在这里了。

在此先感谢您的帮助。

session ssl ftp openssl resume
2个回答
2
投票

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

SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_CLIENT);

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

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


2
投票

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

  • 建立控制连接上的TLS / SSL会话后,使用SSL_get1_session检索会话。我专门从SSL_set_info_callback设置的回调中做到这一点,当where & SSL_ST_CONNECT
  • 在为数据连接设置TLS / SSL会话时,调用SSL_set_session并引用控制连接会话。
© www.soinside.com 2019 - 2024. All rights reserved.