реализация SSL-туннеля внутри кода С++ (WinSock)

У меня есть приложение, которое является одновременно клиентом и сервером с точки зрения соединения TCPIP.

Client1(внешний) ---A---> Мое приложение ---B---> Server1(внешний)

Соединения A и B в основном выполняются с помощью CAsyncSocket, но также и с CSocket (есть более 1 A и более 1 B).

Моя задача - ДОБАВИТЬ SSL к A и B. Мы должны избавиться от stunnel по требованиям безопасности — администратор может манипулировать туннелем или прослушивать соединения между туннелем и My App. Не спрашивайте, но это требование и идея, почему это должно быть сделано в моем приложении, а не с помощью stunnel.

В настоящее время SSL реализован с внешним туннелем SSL (stunnel).

Client1 (внешний) ---A---> STUNNEL1 ---> Мое приложение ---> STUNNEL2 ---B--> Server1 (внешний)

Добавление SSL к A и B, например. openssl API — это много грязной работы. Слишком много.

Итак, я подумал... можно ли как-то создать SSL-туннель (вместо Stunnel) внутри моего приложения. И сделать так, чтобы существующие сокеты подключались к туннелю, но чтобы администратор Windows не мог прослушивать трафик между приложением и туннелем?

NOW is:

My app now:
Listens 192.168.1.1:5000
Listens 192.168.1.1:5001

Connects to 192.168.1.2:9000
Connects to 192.168.1.2:9001

New schema:
Listens 127.0.0.1:15000
Listens 127.0.0.1:15001
ThreadTunnel listens 192.168.1.1:5000 (forwards to  127.0.0.1:15000)
ThreadTunnel listens 192.168.1.1:5001 (forwards to  127.0.0.1:15001)

Connects to 127.0.0.1:19000
Connects to 127.0.0.1:19001
ThreadTunnel listens 192.168.1.1:19000 (forwards to  192.168.1.2:9000 )
ThreadTunnel listens 192.168.1.1:19001 (forwards to  192.168.1.2:9001 )

This schema would be ideal but problem is that admin could listen traffic between

127.0.0.1:15000  <-> 192.168.1.1:5000  
or 127.0.0.1:19000 <-> 192.168.1.1:19000 

Есть ли способ заставить CSocket/CAsyncSocket и OpenSSL передавать друг друга в одном и том же .exe, чтобы администратор не мог перехватывать трафик?


person user1283791    schedule 26.04.2012    source источник
comment
Конечно, админ может прослушивать соединение между приложением и stunnel, так как оно не защищено — насколько я понимаю, оно на той же машине. Но не кажется ли вам, что есть более серьезные проблемы, если на компьютере пользователя злоумышленник вошел в систему с учетными данными администратора?   -  person Gyuri    schedule 23.02.2013


Ответы (1)


Эта статья CodeProject, кажется, отвечает на этот вопрос: http://www.codeproject.com/Articles/3855/CAsyncSocketEx-Replacement-for-CAsyncSocket-with-p

person Gyuri    schedule 22.02.2013