Java-Tipp 42: Schreiben Sie Java-Apps, die mit Proxy-basierten Firewalls funktionieren

Fast jedes Unternehmen befasst sich mit dem Schutz seines internen Netzwerks vor Hackern und Dieben. Eine übliche Sicherheitsmaßnahme besteht darin, das Unternehmensnetzwerk vollständig vom Internet zu trennen. Wenn die bösen Jungs keine Verbindung zu einer Ihrer Maschinen herstellen können, können sie sich nicht in sie hacken. Der unglückliche Nebeneffekt dieser Taktik ist, dass interne Benutzer nicht auf externe Internet-Server wie Yahoo oder JavaWorld zugreifen können. Um dieses Problem zu beheben, installieren Netzwerkadministratoren häufig einen sogenannten "Proxyserver". Ein Proxy ist im Wesentlichen ein Dienst, der sich zwischen dem Internet und dem internen Netzwerk befindet und Verbindungen zwischen den beiden Welten verwaltet. Proxies helfen dabei, externe Sicherheitsbedrohungen zu reduzieren, während interne Benutzer weiterhin auf Internetdienste zugreifen können. Während Java das Schreiben von Internet-Clients vereinfacht, sind diese Clients nutzlos, es sei denn, sie können an Ihrem Proxy vorbeikommen. Glücklicherweise macht es Java einfach, mit Proxys zu arbeiten - wenn Sie die magischen Wörter kennen, das heißt.

Das Geheimnis der Kombination von Java und Proxys liegt in der Aktivierung bestimmter Systemeigenschaften in der Java-Laufzeit. Diese Eigenschaften scheinen nicht dokumentiert zu sein und werden als Teil der Java-Folklore zwischen Programmierern geflüstert. Um mit einem Proxy arbeiten zu können, muss Ihre Java-Anwendung Informationen zum Proxy selbst sowie Benutzerinformationen zu Authentifizierungszwecken angeben. Bevor Sie in Ihrem Programm mit Internetprotokollen arbeiten, müssen Sie die folgenden Zeilen hinzufügen:

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

Die erste Zeile oben teilt Java mit, dass Sie einen Proxy für Ihre Verbindungen verwenden, die zweite Zeile gibt den Computer an, auf dem der Proxy lebt, und die dritte Zeile gibt an, welchen Port der Proxy überwacht. Bei einigen Proxys muss ein Benutzer einen Benutzernamen und ein Kennwort eingeben, bevor der Internetzugang gewährt wird. Dieses Verhalten ist wahrscheinlich aufgetreten, wenn Sie einen Webbrowser hinter einer Firewall verwenden. So führen Sie die Authentifizierung durch:

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

Die Idee hinter dem obigen Codefragment ist, dass Sie Ihren HTTP-Header anpassen müssen, um Ihre Benutzerinformationen zu senden. Dies wird mit dem setRequestProperty()Anruf erreicht. Mit dieser Methode können Sie die HTTP-Header bearbeiten, bevor die Anforderung gesendet wird. Für HTTP müssen Benutzername und Kennwort base64-codiert sein. Glücklicherweise gibt es einige gemeinfreie APIs, die die Codierung für Sie durchführen (siehe Abschnitt Ressourcen).

Wie Sie sehen, ist das Hinzufügen von Proxy-Unterstützung zu Ihrer Java-Anwendung nicht viel. Wenn Sie wissen, was Sie jetzt wissen, und ein wenig recherchieren (Sie müssen herausfinden, wie Ihr Proxy mit dem Protokoll umgeht, an dem Sie interessiert sind, und wie Sie mit der Benutzerauthentifizierung umgehen), können Sie Ihren Proxy mit anderen Protokollen implementieren.

Proxying FTP

Scott D. Taylor schickte die magische Beschwörung, um sich mit dem Proxying des FTP-Protokolls zu befassen:

defaultProperties.put ("ftpProxySet", "true"); defaultProperties.put ("ftpProxyHost", "Proxy-Host-Name"); defaultProperties.put ("ftpProxyPort", "85");

Sie können dann mit dem "ftp" -Protokoll über Folgendes auf die URLs der Dateien zugreifen:

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

Wenn jemand Beispiele für die Verwendung eines Proxys mit anderen Internetprotokollen hat, würde ich sie gerne sehen.

Hinweis: Der Beispielcode (Example.java) wurde nur mit JDK 1.1.4 getestet.

Ron Kurr arbeitet seit acht Jahren als Softwareentwickler bei Cabletron Systems mit C ++, Unix und NT. In den letzten zwei Jahren widmete er sich Java- und Internet-Technologien.

Erfahren Sie mehr über dieses Thema

  • 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 (ein kostenloser Proxyserver) //www.cabletron.com/csproxy/
  • Relevante RFCs //www.cabletron.com/csproxy/handbook/rfc/

Diese Geschichte "Java-Tipp 42: Schreiben von Java-Apps, die mit Proxy-basierten Firewalls funktionieren" wurde ursprünglich von JavaWorld veröffentlicht.