我是实现 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。也没有帮助。
我真的被困在这里了。
预先感谢您的任何帮助。
我的情况不同.我已经编写了一个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)