Delphi IdMappedPortTCP OnOutboundConnect SSL支持

Delphi IdMappedPortTCP OnOutboundConnect SSL支持,delphi,indy,indy10,Delphi,Indy,Indy10,我试图创建一个简单的程序,允许非SSL感知的客户端通过SSL进行通信 基本上,IdMappedPortTCP接受来自客户端的非加密(非SSL)数据,并通过SSL将数据转发到指定的MappedHost和MappedPort属性 到目前为止,我在OnOutboundConnect事件上尝试了以下代码,但似乎不起作用: AContext.Connection.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(AContext.Connection);

我试图创建一个简单的程序,允许非SSL感知的客户端通过SSL进行通信

基本上,IdMappedPortTCP接受来自客户端的非加密(非SSL)数据,并通过SSL将数据转发到指定的MappedHost和MappedPort属性

到目前为止,我在OnOutboundConnect事件上尝试了以下代码,但似乎不起作用:

AContext.Connection.IOHandler :=  TIdSSLIOHandlerSocketOpenSSL.Create(AContext.Connection);

可以将其看作是stunnel(SSL/TLS代理)的一个简单版本

您在错误的事件中分配了错误的IOHandler

您正在将连接的IOHandler分配给客户端,而不是将连接的IOHandler分配给映射的服务器。在与映射服务器建立连接后触发的事件中,您将执行此操作

此外,在建立SSL会话时,必须将SSLIOHandler的
PassThrough
属性设置为False。默认情况下这是正确的

OnConnect
事件而不是
OnOutboundConnect
事件中,使用以下命令:

var
  Conn: TIdTCPConnection;
  SSL: TIdSSLIOHandlerSocketOpenSSL;
begin
  Conn := TIdMappedPortContext(AContext).OutboundClient;
  SSL := TIdSSLIOHandlerSocketOpenSSL.Create(Conn);
  SSL.PassThrough := False;
  Conn.IOHandler := SSL;
end;

当我说“不工作”时,我的意思是IOHandler被忽略,甚至程序也不会抱怨缺少OpenSSL DLL。像往常一样,你的人!谢谢你的澄清。我想“出境”这件事把我弄糊涂了。我认为我不需要“释放”任何资源,因为它将自动释放。@MakeG:在隧道场景中,您有一个入站客户端连接到
TIdMappedPortTCP
AContext
),一个出站客户端连接到映射的目标服务器(
AContext.OutboundClient
)。关于对象生存期,您是正确的,因为除了SSLIOHandler之外,所有的东西都属于
TIdMappedPortTCP
,SSLIOHandler属于
OutboundClient