我是实施FTP客户端(WinSCP)的开源开发人员。
我正在尝试从传输套接字上的FTP控制套接字恢复TLS / SSL会话。 一些FTP服务器开始要求这样做。
E.g。 vsftpd的:
https://scarybeastsecurity.blogspot.com/2009/02/vsftpd-210-released.html
我正在使用OpenSSL来实现SSL层。
我尝试了一种显而易见的方式来实现会话简历,即使用SSL_get1_session
和SSL_set_session
,如下所示:
https://www.linuxjournal.com/article/5487
虽然它不起作用。我仍然无法连接到任何需要恢复TLS会话的FTP服务器(如vsftpd)。
我怀疑问题可能是由于我的情况,有两个并行的TLS连接,它们不能共享相同的TLS会话。这与linuxjournal.com上的示例不同,其中第一个连接在另一个连接打开之前关闭。
我还尝试了几种克隆会话的方法,例如:使用i2d_SSL_SESSION
/ d2i_SSL_SESSION
。也没有帮助。
我真的被困在这里。
提前感谢您的帮助。
答案 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_session
和SSL_set_session
。第一次尝试时我必须错误地使用它们。
SSL_get1_session
检索会话。我专门从SSL_set_info_callback
设置的回调中执行此操作,where & SSL_ST_CONNECT
。SSL_set_session
。