Возобновление сеанса TLS / SSL на FTP-соединении с OpenSSL - PullRequest
4 голосов
/ 16 октября 2011

Я - разработчик с открытым исходным кодом, использующий FTP-клиент ( WinSCP ).

Я пытаюсь возобновить сеанс TLS / SSL из управляющего сокета FTP на сокете передачи.Некоторые серверы FTP начали требовать этого.

Например, vsftpd:
https://scarybeastsecurity.blogspot.com/2009/02/vsftpd-210-released.html


Я использую OpenSSL для реализации уровня SSL.

I 'Мы попробовали очевидный способ реализовать возобновление сеанса, то есть использовать SSL_get1_session и SSL_set_session, как здесь:
https://www.linuxjournal.com/article/5487

Хотя это не работает.Я все еще не могу подключиться к любому серверу FTP, требующему возобновления сеанса TLS (например, vsftpd).

У меня есть подозрение, что проблема может быть связана с тем, что в моем случае есть два параллельных соединения TLS, которыене может использовать один и тот же сеанс TLS.Это отличается от примера на linuxjournal.com, где первое соединение закрывается до открытия другого.

Я также пробовал несколько способов клонировать сеанс, например, используя i2d_SSL_SESSION / d2i_SSL_SESSION.Не помогло.

Я действительно застрял здесь.

Заранее благодарен за любую помощь.

Ответы [ 2 ]

2 голосов
/ 08 сентября 2015

Использование SSL_get1_session и SSL_set_session сработало в конце. Должно быть, я использовал их неправильно при попытке в первый раз.

  • Как только сеанс TLS / SSL на управляющем соединении установлен, используйте SSL_get1_session для получения сеанса. Я специально делаю это из обратного вызова, установленного SSL_set_info_callback, когда where & SSL_ST_CONNECT.
  • Вызовите SSL_set_session со ссылкой на сеанс управляющего соединения при настройке сеанса TLS / SSL для соединения для передачи данных.
2 голосов
/ 28 октября 2011

Вы должны специально включить кэширование сеанса клиента на вашем SSL_CTX объекте с помощью:

SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_CLIENT);

Вам также может понадобиться увеличить время ожидания кэша сеанса по умолчанию (по умолчанию 300 секунд), используя SSL_CTX_set_timeout().

(Вы также должны создавать свои SSL объекты из того же объекта SSL_CTX).

...