Programování

Tip Java 42: Napište aplikace Java, které fungují s branami firewall založenými na proxy serveru

Téměř každá společnost se zabývá ochranou své vnitřní sítě před hackery a zloději. Jedním z běžných bezpečnostních opatření je úplné odpojení podnikové sítě od internetu. Pokud se zločinci nemohou připojit k žádnému z vašich strojů, nemohou do nich proniknout. Nešťastným vedlejším účinkem této taktiky je, že interní uživatelé nemají přístup k externím internetovým serverům, jako je Yahoo nebo JavaWorld. Aby tento problém vyřešili, správci sítě často instalují něco, čemu se říká „proxy server“. Proxy je v zásadě služba, která sedí mezi internetem a vnitřní sítí a spravuje spojení mezi těmito dvěma světy. Servery proxy pomáhají snižovat vnější bezpečnostní hrozby a současně umožňují interním uživatelům přístup k internetovým službám. Zatímco Java usnadňuje psaní internetových klientů, tito klienti jsou k ničemu, pokud se nedostanou přes váš proxy server. Naštěstí Java usnadňuje práci s proxy - pokud znáte kouzelná slova, je to tak.

Tajemství kombinace jazyka Java a proxy spočívá v aktivaci určitých vlastností systému za běhu prostředí Java. Tyto vlastnosti se zdají být nezdokumentované a mezi programátory se šeptají jako součást jávského folklóru. Aby mohla aplikace Java pracovat s proxy serverem, musí specifikovat informace o samotném proxy serveru a také zadat informace o uživateli pro účely autentizace. Než začnete pracovat s jakýmikoli internetovými protokoly, musíte do svého programu přidat následující řádky:

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

První řádek výše říká Javě, že pro připojení budete používat proxy, druhý řádek určuje stroj, na kterém proxy žije, a třetí řádek označuje, na kterém portu proxy naslouchá. Někteří proxy vyžadují, aby uživatel před udělením přístupu k internetu zadal uživatelské jméno a heslo. Pravděpodobně jste se s tímto chováním setkali, pokud používáte webový prohlížeč za bránou firewall. Zde je návod, jak provést ověření:

URLConnection connection = url.openConnection (); Řetězec heslo = "uživatelské jméno: heslo"; Řetězec encodedPassword = base64Encode (heslo); connection.setRequestProperty ("Proxy-Authorization", encodedPassword); 

Myšlenka za výše uvedeným fragmentem kódu spočívá v tom, že k odeslání informací o uživateli musíte upravit záhlaví HTTP. Toho je dosaženo pomocí setRequestProperty () volání. Tato metoda umožňuje manipulovat se záhlavími HTTP před odesláním požadavku. HTTP vyžaduje, aby bylo uživatelské jméno a heslo zakódováno do base64. Naštěstí existuje několik rozhraní API pro veřejné domény, které kódování provedou za vás (viz část Zdroje).

Jak vidíte, přidávání podpory proxy do vaší aplikace Java není příliš mnoho. Vzhledem k tomu, co nyní víte, a malému výzkumu (budete muset zjistit, jak váš proxy zpracovává protokol, který vás zajímá, a jak zacházet s ověřováním uživatelů), můžete implementovat svůj proxy s jinými protokoly.

Proxying FTP

Scott D. Taylor poslal kouzelné zaklínadlo, aby se vypořádal s proxy serverem protokolu FTP:

defaultProperties.put ("ftpProxySet", "true"); defaultProperties.put ("ftpProxyHost", "proxy-host-name"); defaultProperties.put ("ftpProxyPort", "85"); 

Poté můžete přistupovat k adresám URL souborů pomocí protokolu „ftp“ pomocí něčeho jako:

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

Pokud má někdo příklady použití proxy s jinými internetovými protokoly, rád bych je viděl.

Poznámka: Ukázkový kód (Example.java) byl testován pouze s JDK 1.1.4.

Ron Kurr pracuje jako softwarový inženýr v Cabletron Systems posledních osm let a používá C ++, Unix a NT. V posledních dvou letech se věnoval Java a internetovým technologiím.

Další informace o tomto tématu

  • 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
  • HTTP Client API //www.innovation.ch/java/HTTPClient/
  • Cabletron Systems //www.cabletron.com/
  • CsProxy (bezplatný proxy server) //www.cabletron.com/csproxy/
  • Relevantní RFC //www.cabletron.com/csproxy/handbook/rfc/

Tento příběh, „Tip Java 42: Psaní aplikací Java pracujících s firewally založenými na proxy“, původně publikoval JavaWorld.