IdMappedPortTCP OnOutboundConnect SSL 支持

IdMappedPortTCP OnOutboundConnect SSL support

我正在尝试创建一个简单的程序,允许不支持 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;