C++ 使用OpenSSL将现有TCP套接字转换为TLS

C++ 使用OpenSSL将现有TCP套接字转换为TLS,c++,ssl,tcp,openssl,C++,Ssl,Tcp,Openssl,我需要一些关于OpenSSL、TLS套接字的信息。首先,我想通过TCP上的TLS与服务器建立连接。 通常,首先创建一个TCP套接字,然后使用TCP套接字连接到服务器,然后(在通过TCP套接字发送或接收任何数据之前)将TCP套接字转换为TLS 我的问题是,按照下面的方法是否可行 创建TCP套接字 使用TCP套接字连接服务器 通过TCP套接字发送和接收一些数据 然后将TCP套接字转换为TLS 注意:我使用的是OpenSSL 在给定的方式下,如果服务器必须支持它,这似乎是可能的。请参阅SMTP

我需要一些关于OpenSSL、TLS套接字的信息。首先,我想通过TCP上的TLS与服务器建立连接。 通常,首先创建一个TCP套接字,然后使用TCP套接字连接到服务器,然后(在通过TCP套接字发送或接收任何数据之前)将TCP套接字转换为TLS

我的问题是,按照下面的方法是否可行

  • 创建TCP套接字

  • 使用TCP套接字连接服务器

  • 通过TCP套接字发送和接收一些数据

  • 然后将TCP套接字转换为TLS

    注意:我使用的是OpenSSL


  • 在给定的方式下,如果服务器必须支持它,这似乎是可能的。请参阅SMTP。它以这种方式工作于SMTP服务器,其中前几个会话是在普通TCP中,然后是通过SSL/TLS。您可以使用BIO_new_socket将现有套接字绑定到BIO,然后使用SSL_set_BIO将此套接字设置为SSL*结构


    您可以找到许多SSL客户端的示例。

    我正在使用OpenSSl API进行上述转换pSslSocket=new SslSocket;pSslSocket->连接(iTcpSocket);pSslSocket->完成协商(10*1000);OpenSSL是基于C的库。它看起来不像OpenSSL代码。SslSocket是OpenSSL上的包装器吗?是的,SslSocket是OpenSSL上的包装器类。在连接方法中,我执行以下操作:BIO*sbio=BIO\u new\u socket(…)SSL\u set\u BIO(…)SSL\u set\u connect\u state(…);SSL_connect(..)是的,您可能希望执行类似于发出STARTTLS通知的操作: