Как обезопасить связь между двумя программами на С ++ через ssh - PullRequest
7 голосов
/ 17 января 2010

Это может быть не программный вопрос.

Экспозиция:

1) Я использую Linux.

2) У меня есть две программы на C ++: «клиент» и «сервер»; они работают на разных машинах, сейчас они общаются по tcpip. У меня есть исходный код для обеих программ.

3) Ни одна из программ не буферизует проверку потока / защиту против человека в середине атаки / mac / шифрования.

4) Я не хочу добавлять этот дополнительный уровень сложности в мои программы.

5) Я хочу, чтобы две программы просто общались по ssh-каналу (но и клиент, и сервер работают на многопользовательских машинах; поэтому, если я просто открою порты, другие пользователи также могут получить к ним доступ).

Вопрос:

Какой наименее навязчивый способ заставить клиента и сервер общаться друг с другом по безопасному каналу?

Спасибо!

Ответы [ 3 ]

8 голосов
/ 17 января 2010

Для разработки программ вам понадобится OpenSSL или GNU TLS . Из этих двух последний написан более четко (в OpenSSL есть много подводных камней).

Для действительно элегантного решения можно использовать OpenSSL через boost :: asio , но это решение, вероятно, подойдет, только если вы начинаете новый проект.

С точки зрения решений на уровне пользователя, если бы вы могли настроить обе программы для запуска от имени указанного пользователя, вы, вероятно, могли бы настроить для них туннель SSL, но это сильно зависит от того, как вы хотите, чтобы соединения были установлены. *

7 голосов
/ 17 января 2010

Ну, вы можете использовать ssh в режиме туннельного прокси. Вы подключаетесь с одного компьютера к другому и настраиваете прокси-порт, а затем клиент подключается к локальному порту 1002 * на своем компьютере, и ssh прокси-сервер устанавливает соединение TCP с удаленным компьютером.

Опция, необходимая для команды ssh: -L.

В комментарии отмечается, что, по крайней мере, теоретически, существует риск того, что какая-нибудь программа на клиентском компьютере может взобраться на порт.

Однако SSL требует много механизмов. Если бы мне пришлось это сделать, и я действительно не хотел использовать -L, я бы погрузился в источник ssh и придумал схему, чтобы сделать то, что -L делает.

1 голос
/ 17 января 2010

У вас есть два варианта, и ни один из них не является SSH.Во-первых, используйте SSL / TLS, который для обеспечения безопасности от локальных пользователей потребует встраивания его в вашу программу.Во-вторых, используйте IPSEC или OpenVPN и некоторые правила локального пользователя в брандмауэре на каждом конце, чтобы ограничить использование туннеля только тем пользователем, который выполняет поставленные задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...