Java savjet 42: Napišite Java aplikacije koje rade s vatrozidima temeljenim na proxyju

Gotovo svaka tvrtka bavi se zaštitom svoje interne mreže od hakera i lopova. Jedna od uobičajenih sigurnosnih mjera je potpuno isključivanje korporativne mreže s interneta. Ako se negativci ne mogu povezati s bilo kojim od vaših strojeva, ne mogu ih provaliti. Nesretna nuspojava ove taktike je da interni korisnici ne mogu pristupiti vanjskim internetskim poslužiteljima, poput Yahooa ili JavaWorlda. Da bi riješili taj problem, mrežni administratori često instaliraju nešto što se naziva "proxy poslužitelj". U osnovi je proxy usluga koja se nalazi između Interneta i interne mreže i upravlja vezama između dva svijeta. Proxyji pomažu u smanjenju vanjskih sigurnosnih prijetnji, a internim korisnicima i dalje omogućuju pristup internetskim uslugama. Iako Java olakšava pisanje internetskih klijenata, ti su klijenti beskorisni ako ne mogu proći vaš proxy. Srećom, Java olakšava rad s proxyjima - ako znate čarobne riječi, tj.

Tajna kombiniranja Jave i proxyja leži u aktiviranju određenih svojstava sustava u Java runtimeu. Čini se da ta svojstva nisu dokumentirana, a programeri ih šapuću kao dio Java folklora. Da bi radio s proxyjem, vaš Java program mora navesti podatke o samom proxyju, kao i korisničke podatke u svrhu provjere autentičnosti. U svoj program, prije nego što počnete raditi s bilo kojim internetskim protokolom, morat ćete dodati sljedeće retke:

System.getProperties (). Put ("proxySet", "true"); System.getProperties (). Put ("proxyHost", "myProxyMachineName"); System.getProperties (). Put ("proxyPort", "85");

Prvi redak gore govori Javi da ćete za svoje veze koristiti proxy, drugi redak navodi stroj na kojem proxy živi, ​​a treći redak označava na kojem portu proxy sluša. Neki proxyji zahtijevaju od korisnika da unese korisničko ime i lozinku prije nego što se odobri pristup Internetu. Vjerojatno ste se susreli s tim ponašanjem ako koristite web preglednik iza vatrozida. Evo kako izvesti provjeru autentičnosti:

URLConnection veza = url.openConnection (); Niz lozinke = "korisničko ime: lozinka"; Niz encodedPassword = base64Encode (lozinka); connection.setRequestProperty ("Proxy-autorizacija", kodirana lozinka);

Ideja koja stoji iza gornjeg fragmenta koda je da morate prilagoditi svoje HTTP zaglavlje da biste poslali svoje korisničke podatke. To se postiže setRequestProperty()pozivom. Ova metoda omogućuje vam manipuliranje HTTP zaglavljima prije nego što se zahtjev pošalje. HTTP zahtijeva da korisničko ime i lozinka budu kodirani u base64. Srećom, postoji nekoliko API-ja javne domene koji će izvršiti kodiranje umjesto vas (pogledajte odjeljak Resursi).

Kao što vidite, dodavanje proxy podrške vašem Java programu nema puno. S obzirom na ono što sada znate i malo istraživanja (morat ćete otkriti kako vaš proxy radi s protokolom koji vas zanima i kako postupati s autentifikacijom korisnika), svoj proxy možete implementirati s drugim protokolima.

Proxying FTP

Scott D. Taylor poslao je čarobni poziv da se bavi proksiranjem FTP protokola:

defaultProperties.put ("ftpProxySet", "true"); defaultProperties.put ("ftpProxyHost", "ime proxy-hosta"); defaultProperties.put ("ftpProxyPort", "85");

Tada možete pristupiti URL-ovima datoteka pomoću protokola "ftp" putem nečega poput:

URL url = novi URL ("ftp://ftp.netscape.com/pub/navigator/3.04/windows/readme.txt"); 

Ako netko ima primjere korištenja proxyja s drugim internetskim protokolima, volio bih ih vidjeti.

Napomena: Primjer koda (Example.java) testiran je samo s JDK 1.1.4.

Ron Kurr radi kao softverski inženjer u Cabletron Systems-u posljednjih osam godina, koristeći C ++, Unix i NT. U posljednje dvije godine posvetio se Javi i internetskim tehnologijama.

Saznajte više o ovoj temi

  • java.lang.System //www.javasoft.com/products/jdk/1.1/docs/api/java.lang.System.html
  • java.net.URLConnection //www.javasoft.com/products/jdk/1.1/docs/api/java.net.URLConnection.html
  • API HTTP klijenta //www.innovation.ch/java/HTTPClient/
  • Cabletron sustavi //www.cabletron.com/
  • CsProxy (besplatni proxy poslužitelj) //www.cabletron.com/csproxy/
  • Relevantni RFC-ovi //www.cabletron.com/csproxy/handbook/rfc/

Ovu priču, "Java Savjet 42: Napišite Java aplikacije koje rade s vatrozidima temeljenim na proxyju" izvorno je objavio JavaWorld.