Suggerimento Java 42: scrivi app Java che funzionano con firewall basati su proxy

Quasi tutte le aziende si preoccupano di proteggere la propria rete interna da hacker e ladri. Una misura di sicurezza comune consiste nello scollegare completamente la rete aziendale da Internet. Se i cattivi non riescono a connettersi a nessuna delle tue macchine, non possono hackerarli. Lo sfortunato effetto collaterale di questa tattica è che gli utenti interni non possono accedere a server Internet esterni, come Yahoo o JavaWorld. Per risolvere questo problema, gli amministratori di rete spesso installano qualcosa chiamato "server proxy". In sostanza, un proxy è un servizio che si trova tra Internet e la rete interna e gestisce le connessioni tra i due mondi. I proxy aiutano a ridurre le minacce alla sicurezza esterne pur consentendo agli utenti interni di accedere ai servizi Internet. Sebbene Java semplifichi la scrittura di client Internet, questi client sono inutili a meno che non riescano a superare il proxy. Fortunatamente, Java rende facile lavorare con i proxy, se conosci le parole magiche, ovviamente.

Il segreto per combinare Java e proxy risiede nell'attivazione di determinate proprietà di sistema nel runtime Java. Queste proprietà sembrano non essere documentate e sono sussurrate tra i programmatori come parte del folklore Java. Per poter lavorare con un proxy, l'applicazione Java deve specificare le informazioni sul proxy stesso e specificare le informazioni sull'utente per scopi di autenticazione. Nel tuo programma, prima di iniziare a lavorare con qualsiasi protocollo Internet, dovrai aggiungere le seguenti righe:

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

La prima riga sopra indica a Java che utilizzerai un proxy per le tue connessioni, la seconda riga specifica la macchina su cui risiede il proxy e la terza riga indica su quale porta il proxy è in ascolto. Alcuni proxy richiedono che un utente digiti un nome utente e una password prima che venga concesso l'accesso a Internet. Probabilmente hai riscontrato questo comportamento se utilizzi un browser Web dietro un firewall. Ecco come eseguire l'autenticazione:

Connessione URLConnection = url.openConnection (); String password = "nome utente: password"; String encodedPassword = base64Encode (password); connection.setRequestProperty ("Proxy-Authorization", encodedPassword);

L'idea alla base del frammento di codice sopra è che devi regolare la tua intestazione HTTP per inviare le tue informazioni utente. Ciò si ottiene con la setRequestProperty()chiamata. Questo metodo consente di manipolare le intestazioni HTTP prima che la richiesta venga inviata. HTTP richiede che il nome utente e la password siano codificati in base64. Fortunatamente, ci sono un paio di API di dominio pubblico che eseguiranno la codifica per te (vedi la sezione Risorse).

Come puoi vedere, non c'è molto da aggiungere al supporto proxy alla tua applicazione Java. Dato quello che ora sai e un po 'di ricerca (dovrai scoprire come il tuo proxy gestisce il protocollo che ti interessa e come gestire l'autenticazione dell'utente), puoi implementare il tuo proxy con altri protocolli.

Proxying FTP

Scott D. Taylor ha inviato l'incantesimo magico per occuparsi del proxy del protocollo FTP:

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

È quindi possibile accedere agli URL dei file utilizzando il protocollo "ftp" tramite qualcosa di simile:

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

Se qualcuno ha esempi di utilizzo di un proxy con altri protocolli Internet, mi piacerebbe vederli.

Nota: il codice di esempio (Example.java) è stato testato solo con JDK 1.1.4.

Ron Kurr ha lavorato come ingegnere del software presso Cabletron Systems negli ultimi otto anni, utilizzando C ++, Unix e NT. Negli ultimi due anni si è dedicato alle tecnologie Java e Internet.

Ulteriori informazioni su questo argomento

  • 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 client HTTP //www.innovation.ch/java/HTTPClient/
  • Sistemi Cabletron //www.cabletron.com/
  • CsProxy (un server proxy gratuito) //www.cabletron.com/csproxy/
  • RFC rilevanti //www.cabletron.com/csproxy/handbook/rfc/

Questa storia, "Suggerimento Java 42: scrivere app Java che funzionano con firewall basati su proxy" è stata originariamente pubblicata da JavaWorld.