相关疑难解决方法(0)

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

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

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

例如 vsftpd:
https://scarybeastsecurity.blogspot.com/2009/02/vsftpd-210-released.html


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

我尝试了明显的方法来实现会话恢复,即使用SSL_get1_sessionand SSL_set_session,如下所示: https:
//www.linuxjournal.com/article/5487

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

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

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

我真的被困在这里了。

预先感谢您的任何帮助。

ftp ssl session resume openssl

7
推荐指数
1
解决办法
3742
查看次数

Boost Asio SSL握手永远不会返回

类似的问题

我的情况不同.我已经编写了一个SSL客户端,boost::asio::ssl但目前没有服务器可以测试,因为它是由其他组开发的.因此,本服务器只接受普通的TCP(不安全)连接.当我使用我的ssl客户端对服务器时,阻塞handshake()挂起/永远不会返回.我在网上搜索并得知Mozilla也有类似的问题 - 它在启动SSL连接到非ssl支持服务器时挂起,但他们的bug已经修复了.我只是对我的部分代码进行解释,以确保没有编码错误:

ctor:

SecuredConnectionPolicy<ThreadPolicy>::SecuredConnectionPolicy() :
   m_sslContext(boost::asio::ssl::context::sslv23),
   m_socket(m_ioService, m_sslContext) //ssl::stream<tcp::socket>
{

}
Run Code Online (Sandbox Code Playgroud)

然后当我的" connect(...)"被调用时:

   m_sslContext.set_options(boost::asio::ssl::context::default_workarounds);

   m_sslContext.set_verify_mode(
            boost::asio::ssl::context::verify_none,
            errorCode
            );

   if(!errorCode)
   {
      /*m_sslContext.set_verify_callback(
               [this](bool bIsPreverificationSuccessful, boost::asio::ssl::verify_context &context){return this->verificationHandler(bIsPreverificationSuccessful, context);},
               errorCode
               );*/

      if(!errorCode)
      {
         m_sslContext.load_verify_file("newcert.pem", errorCode);

         if(!errorCode)
         {
            m_socket.lowest_layer().connect(remoteEndpoint, errorCode);

            if(!errorCode)
            {  //    ########### Following NEVER RETURNS #############
               m_socket.handshake(boost::asio::ssl::stream_base::client, errorCode);

               if(errorCode)
               {
                  std::cerr << "Secured Connection Handshake Failed! " << errorCode.message() << std::endl;
               }
            }
            else
            {
               std::cerr << "Secured Connection Failed! " << …
Run Code Online (Sandbox Code Playgroud)

c++ ssl boost boost-asio c++11

5
推荐指数
1
解决办法
1215
查看次数

标签 统计

ssl ×2

boost ×1

boost-asio ×1

c++ ×1

c++11 ×1

ftp ×1

openssl ×1

resume ×1

session ×1