Зворотний зв'язок

Протокол SSL

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 так чтобы в цикле читать байт из входного потока и писать в выходной поток. И цикл должен будет продолжаться до тех пор пока сокетное соединение не будет закрыто.

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

Давайте кратко рассмотрим основные моменты работы программы:

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

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

При вызове конструктора класса AbstractRedirector в качестве параметра передается имя файла настроек. Из данного файла читаются все элементы Route и помещаются в специальный массив. После создания объекта класса для начала непосредственно обслуживания должна быть вызвана функция synchroRun. Данная функция создает набор экземпляров безымянного класса производного от Thread в данном классе перекрыта функция run, которая в цикле читает побайтно информацию из сокета входящего запроса и отправляет его в поток вывода для сокета исходящего соединения. Данный цикл прекращается, когда сокетное соединение с любой из двух сторон будет прервано.


Реферати!

У нас ви зможете знайти і ознайомитися з рефератами на будь-яку тему.







Не знайшли потрібний реферат ?

Замовте написання реферату на потрібну Вам тему

Замовити реферат