2017-08-25 4 views
1

J'essaie de créer un programme simple qui permet aux clients non-SSL de communiquer via SSL.IdMappedPortTCP OnOutboundConnect Support SSL

Fondamentalement, IdMappedPortTCP accepte les clients non cryptés (non SSL) et transmet les données via SSL aux propriétés MappedHost et MappedPort spécifiées.

Jusqu'à présent, j'essayé le code suivant sur l'événement OnOutboundConnect mais il semble ne fonctionne pas:

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

Pensez comme une version simple de stunnel (proxy SSL/TLS)

+0

Quand je dis « ne fonctionne pas », je voulais dire que le IOHandler est ignoré et même le programme ne se plaint pas de manquer DLLs OpenSSL. – MakeG

Répondre

1

Vous attribue le mauvais IOHandler dans le mauvais événement.

Vous affectez le IOHandler de la connexion au client, pas le IOHandler de la connexion au serveur mappé. Et vous le faites dans l'événement qui est déclenché après que la connexion au serveur mappé a été établie.

De même, lors de l'établissement de la session SSL, vous devez définir la propriété PassThrough de SSLIOHandler sur False. C'est vrai par défaut.

En cas OnConnect au lieu de l'événement OnOutboundConnect, utilisez ceci:

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

Comme d'habitude votre homme! Merci pour la clarification. Je suppose que la chose «sortant» m'a dérouté. Je ne pense pas que je doive "libérer" toutes les ressources car elles seront libérées automatiquement. – MakeG

+0

@MakeG: dans un scenerio de tunnel, vous avez un client entrant se connectant à 'TIdMappedPortTCP' (' AContext'), et un client sortant se connectant au serveur cible mappé ('AContext.OutboundClient'). Et vous avez raison concernant la durée de vie de l'objet, puisque tout est détenu par 'TIdMappedPortTCP', à l'exception de SSLIOHandler, qui appartient à' OutboundClient'. –