2017-08-25 2 views
1

私は非SSL対応クライアントがSSLを介して通信できるようにする簡単なプログラムを作成しようとしています。IdMappedPortTCP OnOutboundConnect SSLのサポート

基本的に、IdMappedPortTCPはクライアントからの非暗号化(SSLではない)を受け入れ、SSLを介して指定されたMappedHostおよびMappedPortプロパティに転送します。

これまでのところ、私はOnOutboundConnectイベントに次のコードを試してみましたが、それは動作していないようだ:それの

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

だと思うがstunnelを(SSL/TLSプロキシ)の簡易版として

+0

は、私はIOHandlerは無視されてもプログラムには、OpenSSLのDLLを行方不明に文句を言うしないことを意味しました。 – MakeG

答えて

1

ます誤ったIOHandlerを間違ったイベントに割り当てています。

マップされたサーバーへの接続のIOHandlerではなく、接続のIOHandlerをクライアントに割り当てます。また、マップされたサーバーへの接続が確立された後に起動された場合にもそうしています。

また、SSLセッションを確立するときは、SSLIOHandlerのPassThroughプロパティをFalseに設定する必要があります。デフォルトではTrueです。代わりにOnOutboundConnectイベントのOnConnect場合に

、これを使用する:私は「働いていない」と述べたときは

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

いつものようにあなたの男!説明をありがとう。私は "アウトバウンド"事が私を混乱させると思う。私は自動的に解放されるため、リソースを「解放」する必要はないと思います。 – MakeG

+0

@MakeG:トンネルscenerioでは、 'TIdMappedPortTCP'(' AContext')に接続するインバウンドクライアントと、マップされたターゲットサーバ( 'AContext.OutboundClient')に接続するアウトバウンドクライアントを持っています。また、 'OutboundClient'によって所有されているSSLIOHandlerを除き、すべてが' TIdMappedPortTCP'によって所有されているので、オブジェクトの存続期間は正しいです。 –

関連する問題