Как правильно сделать авторизацию и шифрование для TCP соединения?

Здравствуйте.
Пишу на Qt/C++ простейший TCP сервер. Необходимо отправлять команды серверу.
Серверов будет два и на каждом будет запускаться этот сервер и друг другу передавать команды.
Но перед этим надо авторизовать второго сервера (tcp/ip сессию) и шифровать соединение, чтобы нельзя было проснифить трафик.
Какие есть уже решения для этого? Методы, способы?
Для шифрования соединения это наверно банально SSL/TLS. А вот с авторизацией не знаю как проще.
  • Вопрос задан
  • 840 просмотров
Решения вопроса 1
bingo347
@bingo347
Crazy on performance...
TLS поддерживает механизм, когда обе стороны предоставляют сертификаты. Вы можете создать свой CA (корневой сертификат) и подписать им сертификаты каждой из сторон, наличие этой подписи защитит от подделки и каждая из сторон сможет проверить другую. Естественно соединения без клиентского сертификата или подписанные не нашим CA обрываем на этапе рукопожатия.
При успешном рукопожатии у нас есть сессионный ключ, которым шифруется трафик.
Так же в целях безопасности я бы ограничил поддержку только протокола TLS1.3, учитывая, что и клиент и сервер - наши приложения, проблем точно не возникнет
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Банально: разделённый секрет (ключи для серверов, пользователей и для шифрования трафика).
Ключ - это формируемый динамически набор символов в конкретный момент времени, который зависит от предыдущего ключа, на основе некой связующей формулы, меняющей предыдущий ключ.

Стартовые ключи - известны только серверам и клиентам, затем - постоянное обновление счётчика использования ключа на обеих сторонах.
Ответ написан
Комментировать
@Karpion
Для TCP соединения - авторизация и шифрование не делаются. Они работают поверх TCP - например, SSL.

Я советую смотреть в сторону SSh - как там это сделано. Уверен, что в SSh уже сделано всё, что Вам хочется; а также то, что Вам пока что не хочется, но потребуется/будет полезно.
Поищите на Хабре статьи про SSh. Сначала смотрите на функциональность - что он может. Потом - копайте, как это делается.
Ещё одно направление поиска - PuTTY. Это тот же SSh, просто под Windows. Возможно, там доки лучше зайдут.

SSh - продукт открытый, код можно тянуть свободно.

Хорошее решение - запихнуть Вашу TCP-сессию в SSh-туннель, который сделает и шифрование, и авторизацию.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы