Это делается путем общения по протоколу
TLS. С точки зрения OSI, этот протокол работает поверх транспортного уровня, т.е. после установки TCP соединения вы ВМЕСТО обыкновенных незашифрованных данных отправляете и получаете TLS-пакеты. Также, почитайте про
STARTTLS, с помощью которого можно инициировать шифрованное соединение поверх уже открытого существующего (т.е. это способ сказать, что вы не хотите переоткрывать TCP-соединение, а хотите прямо здесь начать работать по TLS).
Разумеется, вам точно не стоит пытаться реализовать TLS самому. Вам помогут
OpenSSL или
PolarSSL. Они подготовят вам как служебные TLS-пакеты, так и зашифруют полезную нагрузку.