7
votes

Comment sécuriser la communication entre deux programmes C ++ sur SSH

Cela pourrait être une question non-programmation.

Exposition:

1) J'utilise Linux.

2) J'ai deux programmes C ++, "Client" et "Server"; Ils fonctionnent sur différentes machines, ils parlent actuellement sur TCPIP. J'ai le code source aux deux programmes.

3) Aucun programme ne fait que tampon sur vérification du flux / défense contre l'homme dans le milieu Attacks / Mac / cryptage.

4) Je ne veux pas ajouter cette couche supplémentaire de complexité à mes programmes.

5) Je souhaite que les deux programmes ne font que parler sur un canal SSH (mais les deux clients et serveur sont en cours d'exécution sur des machines multi-utilisateurs; donc si je viens d'ouvrir des ports, d'autres utilisations peuvent y accéder aussi).

Question:

Quelle est la méthode la moins intrusive pour obtenir client et serveur de se parler sur un canal sécurisé?

Merci!


0 commentaires

3 Réponses :


9
votes

En ce qui concerne les solutions de programmation, vous auriez besoin openssl ou gnu tls . Parmi ces deux, ce dernier est beaucoup plus proprement écrit (OpenSSL a de nombreux pièges).

Pour une solution très élégante, on utiliserait OpenSSL via Boost :: Asio , mais cette solution ne convient probablement que si vous démarrez un nouveau projet.

En termes de solutions d'espace utilisateur, si vous pouviez configurer les deux programmes à exécuter en tant qu'utilisateur spécifié, vous pouvez probablement configurer un tunnel SSL pour eux, mais cela dépend fortement de la manière dont vous voulez que les connexions soient établies.


0 commentaires

7
votes

Eh bien, vous pouvez utiliser SSH en mode proxy tunnel. Vous vous connectez à partir de la machine à l'autre et configurez le port de proxy, puis le client se connecte au port local de sa machine et SSH proxie de la connexion TCP sur la machine distante.

L'option dont vous avez besoin pour la commande SSH est -l .

Un commentaire souligne que c'est, du moins en théorie, à risque d'un programme sur la machine client grimpant sur le port.

Cependant, SSL nécessite beaucoup de mécanisme. Si je devais faire cela, et je ne voulais vraiment pas utiliser -l, je plongerais à la source de SSH et proposez un schéma pour faire ce qu'il fait.


2 commentaires

L'OP nécessitait la sécurité des autres utilisateurs de l'hôte local. Le transfert de ports SSH ne fait rien pour empêcher un autre utilisateur de snooper sur la même prise que seul le lien entre les hôtes est crypté.


Je ne peux pas penser à une attaque de machine multi-utilisateur très pratique, bien que j'avais admis que c'est théoriquement possible. Si vous choisissez un port, une fourchette et EXED SSH, puis vous vous connectez ...



1
votes

Vous avez essentiellement deux options, et aucun d'entre eux n'est SSH. L'une, utilisez SSL / TLS, qui pour donner la sécurité contre les utilisateurs locaux nécessitera de la construire dans votre programme. Deux, utilisez IPSec ou OpenVPN et certaines règles de l'utilisateur local dans le pare-feu à chaque extrémité pour restreindre l'utilisation du tunnel pour uniquement l'utilisateur exécutant les tâches en question.


0 commentaires