Consejo 42 de Java: escriba aplicaciones Java que funcionen con firewalls basados ​​en proxy

Casi todas las empresas se preocupan por proteger su red interna de piratas informáticos y ladrones. Una medida de seguridad común es desconectar completamente la red corporativa de Internet. Si los malos no pueden conectarse a ninguna de sus máquinas, no pueden piratearlas. El desafortunado efecto secundario de esta táctica es que los usuarios internos no pueden acceder a servidores de Internet externos, como Yahoo o JavaWorld.. Para solucionar este problema, los administradores de red suelen instalar algo llamado "servidor proxy". Básicamente, un proxy es un servicio que se encuentra entre Internet y la red interna y administra las conexiones entre los dos mundos. Los proxies ayudan a reducir las amenazas de seguridad externas al mismo tiempo que permiten a los usuarios internos acceder a los servicios de Internet. Si bien Java facilita la escritura de clientes de Internet, estos clientes son inútiles a menos que puedan superar su proxy. Afortunadamente, Java facilita el trabajo con proxies, es decir, si conoce las palabras mágicas.

El secreto para combinar Java y proxies radica en activar ciertas propiedades del sistema en el tiempo de ejecución de Java. Estas propiedades parecen no estar documentadas y se susurran entre programadores como parte del folclore de Java. Para trabajar con un proxy, su aplicación Java necesita especificar información sobre el proxy en sí, así como especificar la información del usuario con fines de autenticación. En su programa, antes de comenzar a trabajar con cualquier protocolo de Internet, deberá agregar las siguientes líneas:

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

La primera línea de arriba le dice a Java que usará un proxy para sus conexiones, la segunda línea especifica la máquina en la que vive el proxy y la tercera línea indica en qué puerto está escuchando el proxy. Algunos proxies requieren que un usuario escriba un nombre de usuario y una contraseña antes de que se le otorgue acceso a Internet. Probablemente haya encontrado este comportamiento si utiliza un navegador web detrás de un firewall. A continuación, se explica cómo realizar la autenticación:

Conexión URLConnection = url.openConnection (); String password = "nombre de usuario: contraseña"; String encodedPassword = base64Encode (contraseña); connection.setRequestProperty ("Proxy-Authorization", encodedPassword);

La idea detrás del fragmento de código anterior es que debe ajustar su encabezado HTTP para enviar su información de usuario. Esto se logra con la setRequestProperty()llamada. Este método le permite manipular los encabezados HTTP antes de que se envíe la solicitud. HTTP requiere que el nombre de usuario y la contraseña estén codificados en base64. Afortunadamente, hay un par de API de dominio público que realizarán la codificación por usted (consulte la sección Recursos).

Como puede ver, no hay mucho para agregar soporte de proxy a su aplicación Java. Teniendo en cuenta lo que ahora sabe y un poco de investigación (tendrá que averiguar cómo maneja su proxy el protocolo que le interesa y cómo lidiar con la autenticación de usuario), puede implementar su proxy con otros protocolos.

Proxying FTP

Scott D. Taylor envió el encantamiento mágico para lidiar con el proxy del protocolo FTP:

defaultProperties.put ("ftpProxySet", "verdadero"); defaultProperties.put ("ftpProxyHost", "nombre-host-proxy"); defaultProperties.put ("ftpProxyPort", "85");

A continuación, puede acceder a las URL de los archivos utilizando el protocolo "ftp" a través de algo como:

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

Si alguien tiene ejemplos del uso de un proxy con otros protocolos de Internet, me encantaría verlos.

Nota: El código de ejemplo (Example.java) solo se ha probado con JDK 1.1.4.

Ron Kurr ha trabajado como ingeniero de software en Cabletron Systems durante los últimos ocho años, utilizando C ++, Unix y NT. Durante los últimos dos años se ha dedicado a las tecnologías Java e Internet.

Más información sobre este tema

  • 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 de cliente HTTP //www.innovation.ch/java/HTTPClient/
  • Sistemas Cabletron //www.cabletron.com/
  • CsProxy (un servidor proxy gratuito) //www.cabletron.com/csproxy/
  • RFC relevantes //www.cabletron.com/csproxy/handbook/rfc/

Esta historia, "Consejo 42 de Java: escriba aplicaciones Java que funcionen con firewalls basados ​​en proxy" fue publicada originalmente por JavaWorld.