Tip 42 Java: Tulis aplikasi Java yang bekerja dengan firewall berbasis proxy

Hampir setiap perusahaan peduli untuk melindungi jaringan internalnya dari peretas dan pencuri. Salah satu ukuran keamanan yang umum adalah memutuskan sepenuhnya jaringan perusahaan dari Internet. Jika orang jahat tidak dapat terhubung ke salah satu mesin Anda, mereka tidak dapat meretasnya. Efek samping yang tidak menguntungkan dari taktik ini adalah pengguna internal tidak dapat mengakses server Internet eksternal, seperti Yahoo atau JavaWorld. Untuk mengatasi masalah ini, administrator jaringan sering memasang sesuatu yang disebut "server proxy". Pada dasarnya, proxy adalah layanan yang berada di antara Internet dan jaringan internal dan mengelola koneksi antara dua dunia. Proxy membantu mengurangi ancaman keamanan luar sambil tetap mengizinkan pengguna internal untuk mengakses layanan Internet. Meskipun Java memudahkan penulisan klien Internet, klien ini tidak berguna kecuali mereka dapat melewati proxy Anda. Untungnya, Java memudahkan untuk bekerja dengan proxy - jika Anda tahu kata-kata ajaibnya.

Rahasia untuk menggabungkan Java dan proxy terletak pada pengaktifan properti sistem tertentu di runtime Java. Properti ini tampaknya tidak terdokumentasi, dan dibisikkan di antara programmer sebagai bagian dari cerita rakyat Jawa. Untuk bekerja dengan proxy, aplikasi Java Anda perlu menentukan informasi tentang proxy itu sendiri serta menentukan informasi pengguna untuk tujuan otentikasi. Dalam program Anda, sebelum Anda mulai bekerja dengan protokol Internet apa pun, Anda harus menambahkan baris berikut:

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

Baris pertama di atas memberi tahu Java bahwa Anda akan menggunakan proxy untuk koneksi Anda, baris kedua menentukan mesin tempat proxy hidup, dan baris ketiga menunjukkan port mana yang didengarkan proxy. Beberapa proxy mengharuskan pengguna untuk mengetikkan nama pengguna dan kata sandi sebelum akses Internet diberikan. Anda mungkin mengalami perilaku ini jika Anda menggunakan browser Web di belakang firewall. Berikut cara melakukan otentikasi:

Koneksi URLConnection = url.openConnection (); String password = "username: password"; String encodedPassword = base64Encode (kata sandi); connection.setRequestProperty ("Proxy-Authorization", encodedPassword);

Ide di balik fragmen kode di atas adalah Anda harus menyesuaikan header HTTP Anda untuk mengirimkan informasi pengguna Anda. Ini dicapai dengan setRequestProperty()panggilan. Metode ini memungkinkan Anda untuk memanipulasi header HTTP sebelum permintaan dikirim. HTTP membutuhkan nama pengguna dan sandi untuk dikodekan base64. Untungnya, ada beberapa API domain publik yang akan melakukan pengkodean untuk Anda (lihat bagian Sumber).

Seperti yang Anda lihat, tidak banyak yang bisa dilakukan untuk menambahkan dukungan proxy ke aplikasi Java Anda. Mengingat apa yang sekarang Anda ketahui, dan sedikit riset (Anda harus mencari tahu bagaimana proxy Anda menangani protokol yang Anda minati dan cara menangani otentikasi pengguna), Anda dapat menerapkan proxy Anda dengan protokol lain.

Proksi FTP

Scott D. Taylor mengirimkan mantra ajaib untuk menangani proxy protokol FTP:

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

Anda kemudian dapat mengakses URL file menggunakan protokol "ftp" melalui sesuatu seperti:

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

Jika ada yang memiliki contoh penggunaan proxy dengan protokol Internet lainnya, saya akan senang melihatnya.

Catatan: Kode contoh (Example.java) hanya diuji dengan JDK 1.1.4.

Ron Kurr telah bekerja sebagai insinyur perangkat lunak di Cabletron Systems selama delapan tahun terakhir, menggunakan C ++, Unix, dan NT. Selama dua tahun terakhir ia mengabdikan dirinya pada teknologi Java dan Internet.

Pelajari lebih lanjut tentang topik ini

  • 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 Klien HTTP //www.innovation.ch/java/HTTPClient/
  • Sistem Cabletron //www.cabletron.com/
  • CsProxy (server proxy gratis) //www.cabletron.com/csproxy/
  • RFC yang relevan //www.cabletron.com/csproxy/handbook/rfc/

Kisah ini, "Tip 42 Java: Menulis aplikasi Java yang bekerja dengan firewall berbasis proxy" pada awalnya diterbitkan oleh JavaWorld.