SSL очень сложен , поэтому вы захотите использовать библиотеку.
Есть несколько вариантов, таких как Keyczar , Botan , cryptlib и т. Д. Каждая из этих библиотек (или библиотеки, предложенные другими например, Boost.Asio или OpenSSL) будет иметь пример кода для этого.
Отвечая на ваш второй вопрос (как интегрировать библиотеку в существующий код без особых проблем): это будет зависеть от вашего текущего кода. Если у вас уже есть простые функции, которые вызывают методы Winsock или socket для отправки / получения int
s, strings
и т. Д., То вам просто нужно переписать кишки этих функций. И, конечно, для начала измените код, который устанавливает сокет.
С другой стороны, если вы вызываете функции Winsock / socket напрямую, вы, вероятно, захотите написать функции, которые имеют аналогичную семантику, но отправлять данные в зашифрованном виде, и заменить вызовы Winsock этими функциями.
Однако вы можете рассмотреть возможность перехода на что-то вроде Буферы протокола Google или Apache Thrift (a.k.a. Facebook Thrift). Документация Google Protocol Buffers гласит: «До буферов протокола существовал формат для запросов и ответов, в котором использовалось ручное маршалинг / демаршаллинг запросов и ответов и который поддерживал ряд версий протокола. Это привело к некоторому очень уродливому коду. ... "
Вы находитесь в фазе маршаллинга / демаршаллинга рук. Это может работать, и фактически проект, над которым я работаю, использует этот метод. Но гораздо приятнее оставить это библиотеке; особенно библиотека, которая уже подумала об обновлении программного обеспечения в будущем.
Если вы пойдете по этому пути, вы настроите сетевые соединения с библиотекой SSL, а затем передадите данные Thrift / Protocol Buffer по этим соединениям. Вот и все. Это включает в себя обширный рефакторинг, но в итоге у вас будет меньше кода для обслуживания. Когда мы добавили Protocol Buffers в кодовую базу того проекта, о котором я упоминал, мы смогли избавиться от примерно 300 строк кода маршалинга / демаршаллинга.