Как защитить коммуникацию между двумя программами C++ по ssh

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

Выставка:

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

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

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

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

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

Вопрос:

Что наименее навязчивый путь состоит в том, чтобы заставить client&server говорить друг с другом по безопасному каналу?

Спасибо!

7
задан anon 16 January 2010 в 23:29
поделиться

3 ответа

, насколько решение по программированию GO, вам нужно OpenSSL или GNU TLS . Из этих двух последних гораздо более чисто написан (openssl имеет много ловушек).

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

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

8
ответ дан 6 December 2019 в 12:51
поделиться

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

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

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

-121--3866344-

Что я сделал, чтобы добавить файлы внутри symlink в Git (я не использовал symlink, но):

sudo mount --bind SOURCEDIRECTORY TARGETDIRECTORY

Выполните эту команду в каталоге Git-managed. TARGETDIRECTORY должен быть создан до установки в него SOURCEDIRECTORY .

Это отлично работает в Linux, но не в OS X! Этот трюк помог мне и с Subversion. Я использую его, чтобы включить файлы из учетной записи Dropbox, где веб-дизайнер делает свои вещи.

-121--626758-

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

Команда ssh имеет значение -L .

Комментарий указывает на то, что это, по крайней мере, теоретически, риск того, что какая-то программа на клиентской машине заберется на порт.

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

7
ответ дан 6 December 2019 в 12:51
поделиться

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

1
ответ дан 6 December 2019 в 12:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: