ssl - 仅关闭 TLS 连接

标签 ssl boost tcp boost-asio

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

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

最佳答案

你不...

只需要关闭套接字时关闭ssl套接字。

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

例如

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

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

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

关于ssl - 仅关闭 TLS 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44149513/

相关文章:

c++ - 死锁线程tcp服务器

multithreading - 多线程客户端-服务器 Web 服务 - 使服务器端数据线程安全

ssl - 我无法让 Rundeck 从 SSL 开始

javascript - 在 http 和 https 之间共享 dom 存储

azure - 使用 Azure CLI 将 SSL 证书从 KeyVault 绑定(bind)到 webapp

c++ - boost::log::r​​ecord_view 赋值运算符

c++ - 如何从 udp 端点获取 *my* ip

Python Socket TCP连接大小限制?

sockets - 使用Delphi进行Indy查询

windows - cURL 访问 SSL 时无法使用curl-ca-bundle.crt