ПредишенСледващото

Изпълнение на HTTPS тунелиране използване JSSE

Създаване на собствен вход за HTTPS тунели под Secure Socket приложението Java разширение.

Библиотека Java Secure Socket Extension (JSSE), създадена от Sun наркоманиите ви дава достъп до защитен сървър, уеб-извън защитната стена през прокси-tonnellirovaniya.Pri този JSSE чака отговор от пълномощника на искането за преминаване, за да започнете с "HTTP 1.0" ; в противен случай, той изпраща IOException. Ако вашият прокси не реагира правилно, трябва да се приложи свой собствен протокол прокси тунел. В тази статия uznaetet като отворен SSLSocket, минаваща през прокси, и да го използвате с URLConnection APIs да комуникира с уеб-защитени сървъри от зад защитна стена ограничения. И така, Java Secure Socket Extension (JSSE) осигурява достъп до сървъра, но за да се направи това, JSSE молба трябва да настроите системата svoysva https.ProxyHost и https.ProxyPort. Тунел код в JSSE търси "HTTP 1.0", както е получено от реакцията на пълномощник. Ако вашият пълномощник, както и много други, се завръща на "HTTP 1.1", ще получите IOException. В този случай, трябва да се прилагат своя собствена HTTPS-тунелен протокол. Аз ще покажа как да създадете Secure Sockets Layer, е в състояние да премине през защитната стена, и да го предадат на манипулатор HTTPS поток, за да отворите HTTPS URL на използване на класа URLConnection.

Как да отворите контакт към прокси тунел

Първото нещо, което да се направи при създаването на защитена връзка, ще бъде откриването на тунела към гнездо прокси порта. Кодът за тази досадна процедура може да се намери в SSLClientSocketWithTunneling.java пример. , който е вграден в опаковката, докато получаване на JSSE. Първо е създаден стандартен контакт от soedininyayuschy вас с прокси порт домакин на пълномощника (линия 65). Тогава е създаден себе си гнездо, което се предава на doTunnelHandshake на метод (). което е причинено от нашия тунел протокол пълномощник:

В doTunnelHandshake (). изпратен на HTTP прокси-командата "CONNECT", името на защитената местност и номера на порта, като параметър (линия 161). оригиналната тунел код в съответствие 206 в кода JSSE след това проверява за "HTTP / 1.0 200", получен от реакцията на пълномощник. Ако пълномощник на фирмата ви съдържа отговор "HTTP 1.1", попада IOException. За да получите около това, в нашия случай, кодът ще се търсят в отговор от пълномощник "200 Установена е връзка", което би означавало, успешното приключване на строителството на тунела (линия 206). Можете да промените кода, така че тя проверява за желаната позиция в отговор от страна на пълномощника.

Самозалепваща гнездо тунел под SSL-контакта

След като успешно създаден гнездо тунел, вие го maskiruetet под SSL-контакта. Тук също всичко е изключително проста:

Преди това, кодът наречен от метод SSLSocketFactory getDefault (). да получат копие от SSLSocketFactory (линия 54). След това тя препраща контакта тунел създаден в предишната стъпка, в createSocket () метод на SSLSocketFactory. createSocket () метод връща SSLSocket. е свързан към нас желания да бъде домакин и пристанище тунел през прокси. По желание можете да добавите HandshakeCompletedListener контакт. Ако искате да получите SSL-операция е завършена.

И все пак, използването на HTTP-команди за SSL-гнездо за достъп до уеб-страници не е перфектен подход, защото това би могло да означава необходимостта да се зареди манипулатор HTTP протокол. Вместо това, вие трябва да използвате HTTPS URL API, включени в JSSE специално за тази цел. За да направите това, вие трябва да прехвърлите тунел SSL-гнездо манипулатор HTTPS URL поток.

SSL-гнездо кутия манипулатор HTTPS URL поток

JSSE библиотека съдържа класа на пакет com.sun.net.ssl ​​HttpsURLConnection. разширява клас java.net.URLConnection. HttpsURLConnection Object vozvryaschaetsya метод openConnection () URL-обект, ако, както е посочено "HTTPS" протокол. Клас HttpsURLConnection включва метод setSSLSocketFactory (). SSLSocketFactory ви позволява да настроите по ваш избор. За да подадете SSL-гнездо HTTPS е в манипулатор URL поток, ще трябва да се определят параметрите на setSSLSocketFactory на метод (), като се използва сокет конструктор връща тунел SSL-муфа, която сте създали по-рано. За да направите това, което трябва да се постави по-рано обсъдени код SSLTunnelSocketFactory клас. разширява клас SSLSocketFactory. SSLSocketFactory клас е абстрактен. За нейното разширяване трябва да се прилагат метод createSocket (). да възстановят тунел SSL-муфа, която сте създали по-рано:

Имайте предвид, че по подразбиране съдържа SSLTunnelSocketFactory SSLSocketFactory обект. SSLSocketFactory Този обект може да се настрои, като се обадите на статичен метод getDefault () (ред 15). Този обект SSLSocketFactory има нужда от теб за наслагване на гнездо тунел SSL-гнездото, както е описано по-рано. Можете също така да се обадите методи getDefaultCipherSuites () и getSupportedCipherSuites () на вашия обект по подразбиране в процеса на изпълнение на подходящи абстрактно супер класа SSLSocketFactory методи. Подробности за това изпълнение може да се види в изходния код SSLTunnelSocketFactory допълнителни източници.

Тунел през прокси чрез URLConnection

Минете през прокси, използвайки URLConnection в JSSE-заявление ще бъде направено, след като се обадите на метод openConnection () и да се провери дали се връща обект обект HttpsURLConnection. Ако е така, можете да създадете копие на SSLTunnelSocketFactory си обект и го поставете в setSSLSocketFactory на метод () (ред 22-25):

Сега можете да получите достъп до HTTPS URL чрез API, осигурява клас URLConnection. Не е нужно да се притеснявате за формата на GET и POST HTTP-команда, както в случая, ако използвате SSL Socket API. Напълно SSLTunnelSocketFactory изходния код на кода за приложение, за да се свържете с защитена URL чрез прокси тунел може да се намери в допълнителни източници. За да компилирате и стартирате приложението, което ще трябва да изтеглите и инсталирате JSSE от сайта на Sun, също посочен в допълнителни източници.

заключение

Ако вашият JSSE-приложение не може да направи своя тунел през защитна стена във вашата организация, трябва да се приложи собствения си гнездо тунел. Примерен код е включен JSSE пакет и показва как да се отвори тунел SSL-гнездо. В тази статия, ние се връщаме малко по-нататък, за да покаже как да се мине гнездо тунел HTTPS URL манипулатор поток и да ви помогне да не се налага да пренапише HTTP-манипулатор.

Подкрепете проекта - споделете линка, благодаря!