как лучше защитить сетевой трафик Cap'n Proto RPC?

Я хотел бы использовать Cap'n Proto RPC для связи с сервером в облаке с рабочего стола в офисе. Cap'n Proto не обеспечивает безопасные сетевые подключения через брандмауэр. Я бы предпочел С++, так как у меня есть другие компоненты, которые требуют этого.

Я вижу, что некоторые люди смотрели на nanomsg и другие транспорты, которые напрямую связаны с приложением, но мне было интересно, может ли stunnel или что-то подобное быть удовлетворительным.

Приложение stunnel, как известно, может обеспечить HTTPS-инкапсуляцию TCP/IP-трафика при определенных условиях, как указано в FAQ:

  1. Протокол TCP, а не UDP.
  2. Протокол не использует множественные соединения, как ftp.
  3. Протокол не зависит от данных Out Of Band (OOB),
  4. Удаленный сайт не может использовать протокол для конкретного приложения, например ssltelnet, где SSL является согласованным вариантом, за исключением тех протоколов, которые уже поддерживаются аргументом протокола для stunnel.

Похоже, что Cap'n Proto RPC может удовлетворить этим условиям. Не думаю, что в этом случае заказчик будет возражать против установки stunnel. Кто-нибудь пробовал это или что-то подобное? Если да, то ваш опыт будет оценен. Если кто-то знает о более быстрой/легкой альтернативе, это также будет полезно.

Благодарность!


person James Fremen    schedule 13.10.2015    source источник
comment
Итак, по сути, вопрос в том, как защитить мое сетевое соединение, если программа этого не сделает? Кроме того, использование вами таких слов, как брандмауэр, странно. Вы уверены, что знаете, что это такое?   -  person deviantfan    schedule 14.10.2015
comment
А если обе конечные точки находятся под вашим/клиентским контролем, то даже не начинайте делать какие-то половинчатые решения для конкретных программ, а делайте полноценный VPN для всего.   -  person deviantfan    schedule 14.10.2015
comment
ах.. появление троллей было лишь вопросом времени :).   -  person James Fremen    schedule 14.10.2015
comment
Так я теперь тролль? Ну... ваше мнение. Вы явно просили альтернативы, и есть некоторые без всех перечисленных ограничений.   -  person deviantfan    schedule 14.10.2015
comment
Я знаю, что разработчик Cap'n Proto следит за этой темой. Он делал буферы оригинального протокола. И да.. я ленивый.. я не знаю, снимает ли это жало от того, что меня называют троллем, но, возможно, это помогает :)   -  person James Fremen    schedule 14.10.2015
comment
@deviantfan Ваши комментарии оскорбляют интеллект вопрошающего, но мне кажется, что вы гораздо больше сбиты с толку, чем он. Я согласен, что это довольно по-тролльски.   -  person Kenton Varda    schedule 14.10.2015
comment
@KentonVarda Если вы сталкиваетесь только с людьми на SO, которые понимают все, что они написали, в том числе то, что они в первую очередь знают, чего хотят, вам действительно повезло. Я отказался верить в эту иллюзию. Судя по всему, это один из редких случаев, простите за оскорбление вашего интеллекта.   -  person deviantfan    schedule 14.10.2015
comment
все хорошо.. я думаю, что результат конструктивен и выгоден всем.   -  person James Fremen    schedule 14.10.2015


Ответы (1)


Да, двухсторонний протокол Cap'n Proto (единственный, который предоставляется в настоящее время) должен отлично работать с stunnel, поскольку это простой транспорт на основе TCP. Конечно, вам нужно будет запустить как stunnel-клиент, так и сервер, но в остальном это должно быть просто настроить. Вы также можете использовать переадресацию портов SSH или VPN для достижения аналогичного результата.

(Обратите внимание, что сам по себе stunnel не имеет ничего общего с HTTPS как таковым, но часто используется для реализации HTTPS, поскольку HTTP также является простым протоколом TCP, а HTTPS — тот же протокол, за исключением TLS. В случае с Cap'n Proto Cap'n Proto заменяет HTTP, значит, вы создаете Cap'nProto-S, я думаю.)

Другой вариант — реализовать абстрактный интерфейс kj::AsyncIoStream непосредственно на основе библиотеки TLS, такой как OpenSSL, GnuTLS и т. д. Уровень RPC Cap'n Proto позволит вам предоставить произвольную реализацию kj::AsyncIoStream в качестве транспорта (через интерфейсы в capnp/rpc-twoparty.h). К сожалению, многие библиотеки TLS имеют довольно уродливые интерфейсы, поэтому это может быть сложно сделать правильно. Но если вы что-то напишете, пожалуйста, отправьте это обратно в проект, так как это то, что я хотел бы иметь в базовой библиотеке.

В конечном итоге мы планируем добавить в Cap'n Proto официальный криптотранспорт, предназначенный для прямой поддержки многосторонних представлений (чего Cap'n Proto на самом деле еще не делает, но я ожидаю, что это станет убийственной функцией, когда она будет готова). Я ожидаю, что эта поддержка появится где-то в 2016 году, но не могу ничего обещать.

person Kenton Varda    schedule 14.10.2015
comment
Благодарность! Рад, что спросил - надеюсь, это поможет другим разработчикам. Из всех библиотек TLS BoringSSL кажется одним из наиболее заметных проектов, которые могут пройти проверку безопасности. Некоторые тесты показывают, что он значительно быстрее, чем OpenSSL для некоторых распространенных случаев использования. К сожалению, OpenSSL, бородавки и все такое, это то, с чем компании знакомы. Я не думаю, что это что-то новое, и, вероятно, все изменится к тому времени, когда ваша команда доберется до этого, но, возможно, это поможет. Мне, вероятно, придется пока довольствоваться stunnel, но я буду следить. - person James Fremen; 14.10.2015
comment
Я рассматриваю возможность сделать это по протоколу sftp: клиент запускает ssh-соединение как подпроцесс и одновременно запускает сервер на удаленном конце как ssh-подсистему. Все, что требуется, — это обеспечить реализацию одного абстрактного интерфейса + инициализацию? - person zzz777; 13.11.2019
comment
FWIW, библиотека Cap'n Proto теперь включает привязки для TLS поверх OpenSSL или BoringSSL — см. src/kj/compat/tls.h. - person Kenton Varda; 14.11.2019