【问题标题】:Only TLS connection shutdown仅 TLS 连接关闭
【发布时间】:2017-10-24 06:35:24
【问题描述】:

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

在我的 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);

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

  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 关闭请求时,服务器正在向客户端发送 FIN ACK 并且 TCP 连接正在关闭。 有人能告诉我为什么会这样吗

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

【问题讨论】:

  • '一些用例',例如什么?为什么在建立了安全连接之后你会想要失去这种安全性?

标签: ssl boost tcp boost-asio


【解决方案1】:

你没有……

仅当您需要关闭套接字时关闭 ssl 套接字。

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

例如

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

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

请记住,这只有在您连接的服务器知道您已退回使用流作为非 ssl 流时才有效(我假设通过某种协议支持)。我从未在实际中看到过这种情况,我看到将 STMP 协议连接为非安全连接,然后使用STARTTLS 命令将其转换为安全连接。不建议这样做,因为它允许中间人攻击停止对话以保护通信。我认为这同样适用于降级连接。

【讨论】:

    猜你喜欢
    • 2019-05-08
    • 1970-01-01
    • 2018-08-09
    • 2010-09-19
    • 2018-11-22
    • 1970-01-01
    • 2013-10-04
    • 2019-07-27
    • 1970-01-01
    相关资源
    最近更新 更多