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