Простой клиент / сервер, TCP / IP, шифрование потока сообщений, SSL (C ++) - PullRequest
4 голосов
/ 21 августа 2009

В основном мой вопрос точно такой же, как этот:

Простой клиент / сервер, TCP / IP, шифрующий поток сообщений, SSL

Разница в том, что мне это нужно для чистого C ++, а не для .NET. Я не могу использовать сторонние библиотеки, поэтому, если это не системный компонент Windows (как выше), мне нужно что-то с исходным кодом, чтобы я мог получить общую идею и собрать ее самостоятельно.

Спасибо:)

Цитирую другой вопрос для справки:

"Написание небольшого TCP / IP клиентского сервера приложение. В основном это создает сервер, и тогда вы можете создать несколько разные клиенты и настроить немного сеанс чата. Что мне интересно, так это есть ли способ включить, используя стандартные библиотеки .net в той или иной форме Шифрование

m_mainSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

Есть ли способ уточнения ТПК используя rsa?

Или вам (мне)? написать несколько пользовательских библиотек, чтобы сделать ключ обменять и затем зашифровать последующие сообщения чата? я сделал что раньше для универа, но это было в Ява, но я знаю, что это не будет трудно преобразовать их. Просто стараюсь не иметь изобретать велосипед ...

Или как насчет использования ssl?

Спасибо, Рон. "

Ответы [ 3 ]

2 голосов
/ 22 августа 2009

Рассматривали ли вы использование библиотеки ASIO? точка-асинхронная точка com / Asio /

Существует пример специально для клиента / сервера на основе SSL. http://think -async.com / Asio / asio-1.4.1 / doc / asio / examples.html # asio.examples.ssl

Это настолько "чистый с ++", насколько вы можете.

1 голос
/ 21 августа 2009

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

0 голосов
/ 22 августа 2009

Написание собственного кода шифрования «не рекомендуется». Достаточно легко совершить простую ошибку при использовании одной из этих библиотек, не говоря уже о том, чтобы попытаться написать ее самостоятельно.

Что вы действительно хотите использовать, так это OpenSSL с Boost.ASIO поверх него. Если вы не можете этого сделать, то ваша следующая лучшая альтернатива - использовать COM-объект Internet Explorer. Это не так гибко, но может хорошо работать в зависимости от ваших потребностей. Вы также можете изучить Win32 API. Последнее, что я посмотрел, было недостаточно крипто-API, широко доступных для этого. Последний способ справиться с этим - обернуть API .NET, чтобы вы могли использовать их из собственного C ++.

Только если ничего из этого не сработает для вас, вы даже можете подумать написать это самостоятельно. Вы будете делать ошибки, и в результате ваше приложение будет менее защищенным. Итак, прежде чем вы начнете пытаться написать свой собственный криптографический код, вы также можете попытаться взглянуть на туннелирование SOCKS через SSH и использовать чью-либо реализацию SSH. Следующая вещь, на которую я бы посмотрел, это купить код, а не писать его самостоятельно. Код будет не так хорош, как предложения с открытым исходным кодом, так как он будет меньше использоваться, поэтому у него будет больше проблем с безопасностью, но он все равно будет лучше, чем то, что вы написали бы при первой попытке сделать это.

Только если вы исчерпали все эти опции, вы должны подумать о написании этого самостоятельно. Подумав об этом, попробуйте все остальные варианты еще раз, чтобы убедиться, что вы не пропустили, чтобы один из них сработал в первый раз.

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

Извините за все это, но разобраться в этих вещах действительно сложно, и вы не можете просто сделать это, просто взглянув на чужую реализацию.

...