只有TLS连接关闭

时间:2017-05-24 05:16:07

标签: ssl boost tcp boost-asio

LDAPServer和LDAPClient,客户端和服务器使用TLS相互连接并且工作正常,但是我有一些用例来阻止TLS连接并使用相同的TCP连接与LDAP服务器进行通信

下面我的ldapperl客户端代码只停止TLS连接,

my $socket = $ldapSrvr->socket();
print $socket;
print "\n";
my $host  = $ldapSrvr->host();
print $host;
print "\n";
my $ssl = ${*$socket}{'_SSL_object'};
print $ssl;
print "\n";
my $s1 = Net::SSLeay::shutdown($ssl);
print "s1 : $s1";
print "\n";
my $s2 = Net::SSLeay::shutdown($ssl);
print "SSL socket is shutdown : $s2";
print "\n";
${*$socket}{'_SSL_opened'} = 0;
my $t = &Net::SSLeay::clear(${*$socket}{'_SSL_object'});
&Net::SSLeay::print_errs();
untie(*$socket);

和服务器端停止唯一的连接。

  LOG("SSLConnection::disconnect");
  boost::system::error_code ec;
  m_sslSocket.shutdown(ec);

  LOG("[Comms] errorcode while SSLshutdown : ",ec);

  LOG("[Comms] SSL socket is closed");

但它也正在关闭TCP连接。 当客户端向服务器发送sslconnection close请求时,服务器正在向客户端发送FIN ACK并且TCP连接正在关闭。 有人可以告诉我为什么会这样吗

http://docs.ros.org/fuerte/api/Castor/html/classasio_1_1ssl_1_1stream.html#ac70bbb97fe4bc58aa23481cd98c91297

1 个答案:

答案 0 :(得分:0)

你不...

仅在需要关闭ssl套接字时关闭它。

如果您希望直接与tcp套接字通信,则只需使用“ next_layer()”成员来获取底层套接字类并以这种方式发送。

例如

m_sslSocket.next_layer().async_send(...);

因此,从降级开始,您必须记住要通过next_layer()方法进行所有套接字访问。

请记住,仅当您连接的服务器知道您已放弃使用该流作为非SSL流(我认为是通过某种协议支持)时,此方法才有效。我从未见过这种情况,我看到相反的情况:将STMP协议连接为非安全,然后使用STARTTLS命令将其转换为安全连接。不建议这样做,因为它允许中间攻击的人停止会话以保护通信。我认为同样适用于降级连接。