Как zeromq работает вместе с SSL?

Я рассматриваю возможность использования zeromq в качестве уровня обмена сообщениями между моими приложениями. По крайней мере, в некоторых случаях я хочу, чтобы связь была безопасной, и я думаю о SSL.

Есть ли какой-то стандартный способ включить ssl для zeromq? Насколько я понимаю, он не поддерживает его из коробки.

Было бы неплохо, если бы у меня был просто параметр при подключении к сокету (bool: useSsl) :)

Любые идеи?


person newtogit    schedule 22.03.2011    source источник


Ответы (3)


Понимая, что на самом деле это не ответ на ваш вопрос, я буду шифровать сообщения напрямую с помощью RSA, прежде чем отправлять их с помощью 0mq.

Ввиду отсутствия более интегрированного метода шифрования, полностью протестированного и реализованного на выбранной мной платформе, я выберу именно его. 0mq совсем недавно выпустила версию 4, в которой встроено шифрование, но она все еще считается экспериментальной и не полностью поддерживается языковыми привязками.

Шифрование сообщения, а не соединения, по-видимому, обеспечивает самый простой способ обновления, и разница для наших целей в значительной степени заключается в семантике, учитывая то, как нам пришлось бы реализовывать шифрование в настоящее время, сегодня.

Редактировать: сейчас я знаю о шифровании больше, чем когда писал это, RSA не является подходящим выбором для шифрования данных сообщений. Используйте AES либо с ручным обменом ключами (это наш краткосрочный подход), либо с реализацией схемы обмена ключами, как в ответе Джима Миллера... но будьте осторожны, если вы выберете последний подход, разработав и внедрив схему обмена ключами < em>надежно сложно. Намного сложнее, чем вы думаете. Вы можете внедрить SSL/TLS напрямую (используя BIO сообщений), и другие сделали это, это тоже не просто, но, по крайней мере, знайте, что схема SSL является отраслевым стандартом и, следовательно, соответствует минимальным требованиям безопасности.

Короче говоря, до того, как криптография эллиптической кривой, запеченная в ZMQ 4, будет считаться надежной и станет стандартной, «принятым решением» будет внедрение SSL/TLS через соединение вручную, а в случае неудачи — использование AES 128 или 256 с безопасным обменом ключами. механизм (совместное использование ключей — это то место, где целесообразно использовать RSA).

person Jason    schedule 07.11.2013
comment
Поскольку это только что получило одобрение, я обновил свой ответ, чтобы отразить то, что я узнал с тех пор, как написал его. - person Jason; 31.03.2014

В настоящее время мы реализуем решение с предварительным общим ключом с использованием 0mq, которое реализует протокол обмена ключами, основанный на TLS/SSL.

По сути, у нас есть служба агрегатора данных, которая публикует зашифрованные данные о состоянии здоровья через многоадресный издатель 0mq. Для шифрования данных используется симметричный ключ (AES128), который можно получить из второй службы, работающей как более простая модель запроса/ответа поверх 0mq.

Для получения симметричного ключа (PSK) мы реализуем следующий протокол:

  • Клиент подключается
  • Сервер отправляет свой сертификат
  • Клиент проверяет сертификат сервера по цепочке доверия ЦС
  • Клиент отправляет свой сертификат
  • Сервер проверяет сертификат клиента по своей цепочке ЦС
  • Сервер шифрует PSK с помощью открытого ключа клиента
  • Сервер отправляет зашифрованный PSK клиенту
  • Клиент расшифровывает PSK

Когда у клиента есть PSK, он может расшифровывать сообщения, полученные по многоадресной рассылке.

Мы также рассматриваем реализацию алгоритма истечения срока действия сеанса, который использует два упакованных ключа в службе многоадресной рассылки. Один ключ является текущим сеансовым ключом, а второй — старым ключом с истекающим сроком действия. Таким образом, у клиента будет немного больше времени для получения нового ключа без буферизации зашифрованных сообщений перед получением нового ключа.

person Jim Miller    schedule 25.11.2011

Согласно Zeromq.org, это пока не поддерживается, но они изучают его. Похоже, это предложено в качестве проекта для Google Summer of Code.

person Jeff    schedule 23.03.2011