Search:

Протокол SSL

сети и SSL

Есть и другой подход. Я много говорил в предыдущих статьях о SSL. Мы создали веб-сервер который общался с клиентом по протоколу HTTPS, а теперь ответьте сами себе разве существует принципиальная разница что защищать: то ли трафик HTTP, то ли любую другую информацию передаваемую по сети. Однако следует четко понимать, что раз мы находимся выше чем третий уровень, то прикладные приложения должны догадываться о нашем существовании и сотрудничать с кодом VPN.

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

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

SSLServerSocket serverSocket = (SSLServerSocket)

ssfa.createServerSocket(localPort); //

ssfa --- javax.net.ssl.SSLSocketFactory

serverSocket.setNeedClientAuth(true);

Однако не забывайте, что я поставил требование к разрабатываемой системе. Клиенты не должны иметь представления о таких технических деталях как сертификаты, SSL, в идеале они должны верить что взаимодейсвуют как по открытому каналу. Поэтому необходимо будет создать слой который будет играть роль посредника между ничего не знающим клиентом и тем слоем который выполняет непосредственно защиту трафика. Однако давайте мы сначала сосредоточимся на решении подзадачи - создании приложения для перенаправления сетевых вызовов.

Пример кода. Туннель для сетевых вызовов

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

Рисунок 2.

Обратите внимание на картинку, я на ней привел пример не только среды JBuilder, но и окно браузера в котором открыт поисковик Google. Но посмотрите на адресную строку, смею вас уверить, что я работаю не в Google, и на самом деле запрос, который я послал локальной машине на порт 2088, был перенаправлен в интернет на сайт Google. Кстати, если вы внимательно посмотреть на скриншот, то можно увидеть лог пересылаемых данных по туннелю. По крайней мере, я думаю, что начало любого запроса http “GET / HTTP 1.1” увидеть можно.

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

Схема работы приложения очень проста: я создаю серверный сокет ServerSocket и жду входящих соединений на определенный порт, номер которого указывается в файле конфигурации. Затем после поступления запроса создается соответствующий клиентский сокет для чтения запросов от инициирующей связь стороны и сразу же создается сокетное соединение с тем хостом и портом на который входящий запрос должен быть перенаправлен. Дальнейшие действия просты и очевидны: необходимо каждый байт приходящий от стороны инициирующей соединение, (давайте для определенности будем называть ее сторона “A”) перенаправлять к стороне “B” (информация о ней находится в файле конфигурации)) и соответственно каждый байт который посылает нам сторона “B” должна быть направлена стороне “A”. Разумеется что данные действия должны выполняться асинхронно и независимо друг от друга, поэтому лучшего решения чем создать два класса потока, класса производных от Thread и перекрыть в нем метод run так чтобы в цикле читать байт из входного потока и писать в выходной поток. И цикл должен будет продолжаться до тех пор пока сокетное соединение не будет закрыто.

Перейти на сторінку номер:
 1  2  3  4  5  6  7  8  9  10  11  12  13 


Подібні реферати:

Програми-архіватори WinARJ

1. Коротка історія розвитку теорії стиснення інформації У сорокових роках учені, що працюють в області інформаційних технологій, ясно зрозуміли, що можна розробити такий спосіб збереження даних, при якому простір буде витрачатися більш ощадливо. Клод Шеннон, вивчаючи нюанси розходжень між семантикою (semantics) (що деяка сутність значить) і синтаксисом (syntax) (як деяка сутність виражається), розробив більшість базових понять цієї теорії. Розуміння того, що те саме значення (семантика) може бути реалізовано різними ...

Що нас чекає найближчим часом у світі 3D графіки

Фотореалістична графіка Останнім часом ведеться багато дискусій про використання фотореалістичної графіки в іграх і додатках, однак жоден з існуючих на ринку 3D акселераторів поки не має можливості забезпечити необхідну апаратну підтримку. При цьому nVidia підтвердила, що в чипсет NV10 буде убудована апаратна підтримка розрахунку трансформацій і освітленості (Transformation and Lighting, T & L), інакше кажучи, у NV10 буде вбудований спеціалізований геометричний чи співпроцесор акселератор геометрії (geometry ...

Історія виникнення ІНТЕРНЕТ

ВСТУП На початку 90-х років минулого століття в Україні про Інтернет знали небагато. Нині Інтернет увійшов у життя мільйонів людей, хоча говорити про високий рівень доступу до нього не можна. Історичний розвиток людства, досягнення науки, техніки і технологій сприяли і сприяють удосконаленню й засобів масової комунікації. Першим технологічним проривом науковці вважають винайдення писемності, починаючи з настінних малюнків, ієрогліфів на папірусі та різьби на дереві до примітивних верстатів та потужних друкарських ...